1. 程式人生 > >資料庫的連結與SQL語句的使用

資料庫的連結與SQL語句的使用

首先我們要有一個註冊頁面(由於省功夫,註冊和登入寫在了一個頁面中,然而這樣並沒有影響。。。)

<form name="regist" action="/regist" method="post">
        使用者名稱:<input type="text" name="username"/>
        密碼:<input type="text" name="password"/>
      <input type="submit" value="註冊"/>
  </form>
  • 這裡的action換成了/regist 所以我們要建立另一個servlet–Regist.java
  • 接著設定一下請求的編碼問題,防止寫入到資料庫時亂碼
    req.setCharacterEncoding("utf-8");

建立資料庫和註冊登入表單

  • 建立資料庫(編碼為utf-8)
    ->CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  • 使用資料庫
    ->use test
  • 建立表單login
->CREATE TABLE login (
  id int(10) NOT NULL AUTO_INCREMENT,
  username varchar(10
) NOT NULL, password varchar(10) NOT NULL, PRIMARY KEY (id) )

這裡資料庫的操作告一段落,接下來時java連結資料庫

目錄結構和程式碼
* 看現在的目錄結構SqlCon.java是專門用於連結資料庫的,在tomcat的lib目錄中也加入mysql-connector.jar這個jar包。

package Dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * Created by online on 15-9-16.
 */
public class SqlCon { public static Connection getConne(){ Connection con = null; String driver = "com.mysql.jdbc.Driver";//連線資料庫所需要的驅動 String url = "jdbc:mysql://localhost:3306/test?"+ "user=root&password=p5385676&useUnicode=true&characterEncoding=UTF8"; //連線的url修改成自己的user和password。其餘不變 try { Class.forName(driver);//開始驅動 } catch (ClassNotFoundException e) { e.printStackTrace(); } try { con = DriverManager.getConnection(url);//獲取連線 return con;//返回這個連線供接下來的增刪改查使用 } catch (SQLException e) { e.printStackTrace(); } return null; } //關閉對資料庫的操作 public static void closeAll(ResultSet rs,Statement stmt,Connection con){ try{ if(rs!=null) rs.close(); if (stmt!=null) stmt.close(); if (con!=null) con.close(); } catch (Exception ex) { System.out.println("Error : " + ex.toString()); } } }
  • Regist.java
package action;

import Dao.AddandSelect;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

/**
 * Created by online on 15-9-16.
 */
@WebServlet(name = "re",urlPatterns = "/regist")
public class Regist extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        req.getSession().setAttribute("username",username);
        try {
            AddandSelect.regist(username,password);//AddandSelect中的regist方法,把使用者名稱和密碼寫入資料庫。
        } catch (SQLException e) {
            e.printStackTrace();
        }
        req.getRequestDispatcher("/index.jsp").forward(req,resp);
    }
}
  • 寫入資料庫和查詢資訊AddandSelect.java
package Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by online on 15-9-16.
 */
public class AddandSelect {
    //註冊資訊寫入資料庫
    public static void regist(String username,String password) throws SQLException {
        Connection con = null;//建立連線資料庫的Connection類
        PreparedStatement sta = null;//建立一個PreparedStatement類,用於執行sql語句
        ResultSet res = null;//如果是查詢語句,查詢後返回的時ResultSet
        try{
            con = SqlCon.getConne();
            String sql=  "insert into login(username,password) values(?,?);";
            sta = con.prepareStatement(sql);
            sta.setString(1,username);
            sta.setString(2,password);
            sta.executeUpdate();//執行sql語句,由於是插入語句,所以不需要返回ResultSet。
        } catch (SQLException e) {
            e.printStackTrace();
        }
        SqlCon.closeAll(res,sta,con);//關閉連線

    }
}
  • 執行並輸入資訊,點選註冊,則可以看到資料庫中已經添加了該條資訊。

資料庫的寫入已經完成。註冊簡單完成,接下來時登入。意思就是說,你輸入使用者名稱和密碼,當你的輸入在資料庫中有,且使用者名稱和密碼匹配,即算登入成功。

  • Homework.java
package action;

import Dao.AddandSelect;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;

/**
 * Created by online on 15-9-11.
 */
@WebServlet(urlPatterns = "/login" ,name = "stuLogin")
public class Homework extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //System.out.println(req.getParameter("username"));//req.getParameter();這個方法就是獲取jsp頁面form表單傳送過來的資料。
        //System.out.println(req.getParameter("password"));//這裡執行並在頁面輸入後提交  則會在控制檯看到輸入內容。
        HttpSession session = req.getSession();//建立session物件
        String username= (String) req.getParameter("username");
        String password= (String) req.getParameter("password");
        session.setAttribute("cu",username);
        try {
            if (AddandSelect.valiuandp(username,password)){//驗證是否匹配到資訊匹配到就進入到success.jsp,不匹配就返回登入介面。
                req.getRequestDispatcher("/success.jsp").forward(req,resp);
            }else {
                req.getRequestDispatcher("/index.jsp").forward(req,resp);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  • AddandSelect.java 中的驗證方法
 //驗證使用者名稱和密碼是否匹配
    public static boolean valiuandp(String username,String password) throws SQLException {
        Connection con = null;
        PreparedStatement sta = null;
        ResultSet rs = null;
        int i = 0;
        try{
            con = SqlCon.getConne();

            String sql = "select * from login where username=? and password=?;";
            sta=con.prepareStatement(sql);
            sta.setString(1,username);
            sta.setString(2,password);
            rs=sta.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }while (rs.next()){
            i++;
        }
        SqlCon.closeAll(rs,sta,con);
        if (i>0){
            return true;
        }
        else {
            return false;
        }

    }

註冊(寫入到資料庫),登入(在資料庫中提取)

註冊的時候還需要有驗證是否有人註冊,填資訊時是否有漏填的。

下一節講述完整的驗證資訊。附簡單的驗證碼新增到網頁中進行驗證(防止暴力登入)