資料庫的連結與SQL語句的使用
阿新 • • 發佈:2018-11-01
首先我們要有一個註冊頁面(由於省功夫,註冊和登入寫在了一個頁面中,然而這樣並沒有影響。。。)
<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;
}
}
註冊(寫入到資料庫),登入(在資料庫中提取)
註冊的時候還需要有驗證是否有人註冊,填資訊時是否有漏填的。