由於我在上學期的Java中掛了所有這周老師讓我去給學弟們講講數據庫連接和登入注冊,順便在寫一篇博客。
先從建立數據庫開始,我用native cat建立一個數據庫
然后就是連接數據庫 具體的數據庫名和表名根據自己的更改
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static String jdbcName = "com.mysql.cj.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/user?serverTimezone=GMT&useSSL=false";
private static String user = "root";
private static String password = "Akko";
private Connection con=null;
public static Connection getConnection() {
Connection con=null;
try {
Class.forName(jdbcName);
con=DriverManager.getConnection(url, user, password);
//System.out.println("數據庫連接成功");
} catch (Exception e) {
// TODO Auto-generated catch block
//System.out.println("數據庫連接失敗");
e.printStackTrace();
}
try {
con = DriverManager.getConnection(url,user,password);
System.out.println("連接成功");
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
return con;
}
public static void main(String[] args)throws SQLException {
Connection conn = getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql ="select * from user";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
System.out.println(getConnection());
while(rs.next()){
System.out.println("成功");
}
}
// return con;
public static void close(Connection con) {
if(con!=null)
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close(Statement state, Connection conn) {
if(state!=null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement state, Connection conn) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(state!=null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
建立bean類
public class Bean {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Bean(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
然后是建立一個到類,里面存放數據庫的登陸注冊方法
//注冊
public boolean insert(Bean bean) {//插入數據的方法
boolean f=false;
String sql="insert into user(id,username,password) values('"+bean.getId()+"','"+bean.getUsername()+"','"+bean.getPassword()+"')";
Connection conn=DBUtil.getConnection();//數據庫連接,加載驅動
Statement state=null;
try
{
state=conn.createStatement();//實例化Statement對象,方便對sql語句進行操作
System.out.println(conn);
state.executeUpdate(sql);
f=true;
//執行數據庫更新操作用於執行INSERT、UPDATE或DELETE語句以及SQLDDL(數據定義語言)語句,
//例如CREATETABLE和DROPTABLE,(創建表和刪除表)
}catch(Exception e)//當try語句中s出現異常時,會執行catch中的語句
{
e.printStackTrace();//捕獲異常的語句
}
finally //finally作為異常處理的一部分,它只能用在try/catch語句中,並且附帶一個語句塊,表示這段語句最終一定會被執行(不管有沒有拋出異常),經常被用在需要釋放資源的情況下。
{
DBUtil.close(conn);
}
return f;
}
//用戶登入
public int check(String username,String password) throws SQLException {
DBUtil db=new DBUtil();
String sql="select * from user where username ="+username+" and password ="+password;
Connection con=db.getConnection();
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
int s=0;
if(rs.next()) {
s=1;
}
return s;
}
然后寫登入注冊頁面
login
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用戶登入</title>
</head>
<body>
<div align="center">
<h1>用戶登入</h1>
<form action="LoginServlet" method="post">
<table id="addTable" class="table table-bordered ">
<tr class="text-center row">
<tr>
<tr class="text-center row">
<td class="col-sm-2">
用戶名
</td>
<td class="col-sm-4">
<input type="text" class="form-control" name="username" id="username" >
</td></tr>
<tr>
<td class="col-sm-2">
密碼
</td>
<td class="col-sm-4">
<input type="password" class="form-control" name="password" id="password" >
</td>
</tr>
<tr align="center" style="height: 20%">
<td style="padding-left: 10px"><input type="submit" name="sub_name" value="用戶登錄"></td>
<td style="padding-right: 40px;padding-left: 20px"><input type="submit" name="sub_name" value="管理員登錄" ></td>
</tr>
</table>
<input type="button" value="注冊"
onclick="javascrtpt:window.location.href='register.jsp'" />
</form>
</div>
</body>
</html>
register
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注冊</title>
</head>
<body>
<%
Object message = request.getAttribute("message");
if (message != null && !"".equals(message)) {
%>
<script type="text/javascript">
alert("<%=request.getAttribute("message")%>"); //彈出對話框
</script>
<%
}
%>
<div align="center">
<h1>增加</h1>
<a href="login.jsp">返回登入頁</a>
<form action="servlet?method=insert" method="post">
<table id="addTable" class="table table-bordered ">
<tr class="text-center row">
<tr>
<td class="col-sm-2">
id
</td>
<td class="col-sm-4">
<input type="text" class="form-control" name="id" id="id" >
</td>
<tr class="text-center row">
<td class="col-sm-2">
用戶名
</td>
<td class="col-sm-4">
<input type="text" class="form-control" name="username" id="username" >
</td></tr>
<tr>
<td class="col-sm-2">
性別
</td>
<td class="col-sm-4">
<input type="text" class="form-control" name="password" id="password" >
</td>
</tr>
</table>
<input type="submit" value="注冊" onclick= "return check()" />
</form>
</div>
</body>
</html>
最后是寫servlet,通過它來連接前端和后端
注冊
private void insert(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
int id = Integer.parseInt(request.getParameter("id"));
String username = request.getParameter("username");
String password = request.getParameter("password");
Bean bean=new Bean(id,username,password);
if(dao.insert(bean)) {
request.setAttribute("message", "注冊成功");
request.getRequestDispatcher("register.jsp").forward(request, response);
}
}
登入
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String sub_name = request.getParameter("sub_name");
HttpSession a = request.getSession();
Dao dao = new Dao();
int s=0;
if (sub_name.equals("用戶登錄")) {
try {
s=dao.check(username, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(s==0) {
response.setHeader("refresh","0.1;url=failLogin.jsp");
}
else {
a.setAttribute("account",username);
request.getRequestDispatcher("usermain.jsp").forward(request,response);
}
}
if(s==0) {
response.setHeader("refresh","0.1;url=failLogin.jsp");
}
else {
a.setAttribute("account",username);
request.getRequestDispatcher("adminmain.jsp").forward(request,response);
}
}
}