就是簡單的對數據進行增刪改查。代碼如下:
1.bean層:用來封裝屬性及其get set方法 toString方法,有參構造方法,無參構造方法等。
public class Bean {
private int id;
private String name;
private String password;
private String sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Bean [id=" + id + ", name=" + name + ", password=" + password + ", sex=" + sex + "]";
}
public Bean(int id, String name, String password, String sex) {
super();
this.id = id;
this.name = name;
this.password = password;
this.sex = sex;
}
public Bean() {
// TODO Auto-generated constructor stub
}
}
2.DBUtil:對數據庫連接關閉操作的封裝:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static String url = "jdbc:mysql://localhost:3306/db10?useUnicode=true&characterEncoding=utf8";
private static String user = "root";
private static String password = "root";
private static String jdbcName="com.mysql.jdbc.Driver";
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();
}
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();
}
}
}
}
可以將其定義為一個工具類,每次使用的時候直接復制,然后更改url里數據庫的名字,這樣可以提高效率。
dao層:對數據庫的各種增刪改查方法的封裝:
1 import java.sql.Connection;
2 import java.sql.PreparedStatement;
3 import java.sql.ResultSet;
4 import java.sql.SQLException;
5 import java.sql.Statement;
6 import java.util.ArrayList;
7 import java.util.List;
8
9 import org.junit.jupiter.api.Test;
10
11 public class Dao {//dao層
12 private DBUtil dbutil=new DBUtil();
13
14
15 public Dao() {
16 // TODO Auto-generated constructor stub
17 }
18 @Test
19 public boolean insert(Bean bean) {//插入數據的方法
20 boolean f=false;
21 String sql="insert into info(id,name,password,sex) values('"+bean.getId()+"','"+bean.getName()+"','"+bean.getPassword()+"','"+bean.getSex()+"')";
22 Connection conn=DBUtil.getConnection();//數據庫連接,加載驅動
23 Statement state=null;
24 try
25 {
26 state=conn.createStatement();//實例化Statement對象,方便對sql語句進行操作
27 System.out.println(conn);
28 state.executeUpdate(sql);
29 f=true;
30 //執行數據庫更新操作用於執行INSERT、UPDATE或DELETE語句以及SQLDDL(數據定義語言)語句,
31 //例如CREATETABLE和DROPTABLE,(創建表和刪除表)
32 }catch(Exception e)//當try語句中s出現異常時,會執行catch中的語句
33 {
34 e.printStackTrace();//捕獲異常的語句
35 }
36 finally //finally作為異常處理的一部分,它只能用在try/catch語句中,並且附帶一個語句塊,表示這段語句最終一定會被執行(不管有沒有拋出異常),經常被用在需要釋放資源的情況下。
37 {
38 DBUtil.close(conn);
39 }
40 return f;
41 }
42
43 public boolean delete(int id ) {//刪除方法
44 String sql="delete from info where id='"+id+"'";
45 boolean f=false;
46 Connection conn =DBUtil.getConnection();
47 Statement st=null;
48 try {
49 st=conn.createStatement();
50 st.executeUpdate(sql);
51 f=true;
52 } catch (SQLException e) {
53 // TODO Auto-generated catch block
54 e.printStackTrace();
55 }
56 finally{
57 DBUtil.close(st, conn);
58 }
59 return f;
60 }
61 public boolean update(Bean bean) {//更新方法
62 String sql="update info set name='"+bean.getName()+"',password='"+bean.getPassword()+"',sex='"+bean.getSex()+"'where id='"+bean.getId()+"'";
63 Connection conn=DBUtil.getConnection();
64 boolean f=false;
65 Statement st=null;
66 try {
67 st=conn.createStatement();
68 st.executeUpdate(sql);
69 f=true;
70 } catch (SQLException e) {
71 // TODO Auto-generated catch block
72 e.printStackTrace();
73 }
74 return f;
75 }
76
77 public List<Bean> list(){//查詢所有方法
78 String sql="select * from info order by id ASC";
79 Connection conn=DBUtil.getConnection();
80 Statement st=null;
81 List<Bean> list=new ArrayList<>();
82 ResultSet rs=null;
83 Bean bean=null;
84 try {
85 st=conn.createStatement();
86 st.executeQuery(sql);
87 rs=st.executeQuery(sql);
88 while(rs.next()) {
89
90 int id=rs.getInt("id");
91 String name = rs.getString("name");
92 String password = rs.getString("password");
93 String sex = rs.getString("sex");
94 bean=new Bean(id,name,password,sex);
95 list.add(bean);
96 }
97 } catch (SQLException e) {
98 // TODO Auto-generated catch block
99 e.printStackTrace();
100 }
101 finally {
102 DBUtil.close(rs, st, conn);
103 }
104 return list;
105 }
106
107
108
109
110
111 }
對數據庫進行操作的方法都封裝在里面。
servlet:簡單說servlet就是跳轉的類,當什么情況下干什么跳轉到哪里。
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class servlet
*/
@WebServlet("/servlet")
public class servlet extends HttpServlet {
Dao dao=new Dao();
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public servlet() {
super();
// TODO Auto-generated constructor stub
}
private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
Bean bean=new Bean(id,name,password,sex);
dao.update(bean);
request.setAttribute("message", "修改成功");
request.getRequestDispatcher("servlet?method=list").forward(request, response);
}
private void list(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
List<Bean> list = dao.list();
request.setAttribute("list", list);
request.getRequestDispatcher("list.jsp").forward(request,response);
}
private void delete(HttpServletRequest request, HttpServletResponse response) throws Exception, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
int id=Integer.parseInt(request.getParameter("id"));
dao.delete(id); //進行數據庫的刪除操作
request.setAttribute("message", "刪除成功");
request.getRequestDispatcher("servlet?method=list").forward(request, response);
}
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 name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
Bean bean=new Bean(id,name,password,sex);
if(dao.insert(bean)) {
request.setAttribute("message", "添加成功");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
String method=request.getParameter("method");
if("insert".equals(method)) {
insert(request,response);
}
else if("delete".equals(method)) {
try {
delete(request,response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if("update".equals(method)) {
update(request,response);
}
else if("list".equals(method)) {
try {
list(request,response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
注意:在創建的時候一定要選擇創建servlet而不是類如圖:

輸入完名字以后點擊next選擇自己要寫的方法:

jsp頁面:
index.jsp:主頁面:
<%@ 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>
<div>
<a href="insert.jsp">添加</a>
</div>
<div>
<a href="servlet?method=list">刪除</a>
</div>
<div>
<a href="servlet?method=list">修改</a>
</div>
<div>
<a href="servlet?method=list">查詢</a>
</div>
</div>
</body>
</html>
主頁面就是一個菜單,至於為什么刪除修改查詢的鏈接都是servlet?method=list,那是因為他們都去調用servlet里面的list方法:
private void list(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
List<Bean> list = dao.list();
request.setAttribute("list", list);
request.getRequestDispatcher("list.jsp").forward(request,response);
}
先把數據庫里所有的信息顯示出來,然后在通過request.getRequestDispatcher("list.jsp").forward(request,response);進行跳轉,跳轉到list.jsp界面,並將之前的所有數據(request,response)一並轉發過去
insert.jsp:
<%@ 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="index.jsp">返回主頁</a>
<form action="servlet?method=insert" method="post">
<div>
id<input type="text" id="id" name="id" />
</div>
<div>
name<input type="text" id="name" name="name" />
</div>
<div>
password<input type="text" id="password" name="password" />
</div>
<div>
sex<input type="radio" id="sex" name="sex" value="男"/>男 <input type="radio"
id="sex" name="sex" value="女" />女
</div>
<div>
<button type="submit">添 加</button>
</div>
</form>
</div>
</body>
</html>
正常的添加頁面。
list.jsp界面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Object message = request.getAttribute("message");
Object grade_list = request.getAttribute("grade_list");
if(message!=null && !"".equals(message)){
%>
<script type="text/javascript">
alert("<%=request.getAttribute("message")%>");
</script>
<%} %>
<div align="center">
<h1 >信息列表</h1>
<a href="index.jsp">返回主頁</a>
<table >
<tr>
<td>id</td>
<td>姓名</td>
<td>密碼</td>
<td>性別</td>
<td align="center" colspan="2">操作</td>
</tr>
<c:forEach items="${list}" var="item">
<tr>
<td>${item.id}</td>
<td>${item.name}</td>
<td>${item.password}</td>
<td>${item.sex}</td>
<td><a href="update.jsp?id=${item.id}&name=${item.name}&password=${item.password}&sex=${item.sex}">修改</a></td>
<td><a href="servlet?method=delete&id=${item.id}">刪除</a></td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
其中用到了標簽庫(<c:forEach>),需要導入jstl的包,並且加入其核心依賴,為固定值,如果不了解請點擊:https://www.cnblogs.com/tkg1314/p/12008284.html查看jstl標簽庫。用<c:forEach>來遍歷信息,然后每行信息都有刪除和修改操作。修改的話跳轉到update.jsp並且將id,name,password,sex的值傳過去。刪除是跳轉到servlet的delete方法:
private void delete(HttpServletRequest request, HttpServletResponse response) throws Exception, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
int id=Integer.parseInt(request.getParameter("id"));
dao.delete(id); //進行數據庫的刪除操作
request.setAttribute("message", "刪除成功");
request.getRequestDispatcher("servlet?method=list").forward(request, response);
}
因為delete只需要id所以只需要將id傳過去。
至於每個jsp里面的:
<%
Object message = request.getAttribute("message");
Object grade_list = request.getAttribute("grade_list");
if(message!=null && !"".equals(message)){
%>
<script type="text/javascript">
alert("<%=request.getAttribute("message")%>");
</script>
<%} %>
是用來獲取servlet里面你通過setAttribute方法添加的信息(紅色加粗):並且提示出來
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 name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
Bean bean=new Bean(id,name,password,sex);
if(dao.insert(bean)) {
request.setAttribute("message", "添加成功");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
這樣便完成了一個簡單的java web 數據庫的簡單增刪改查,沒有做頁面,那個password不是密碼,只是一個名字,因此<input>標簽沒用password類型。
運行結果:
主頁面:

添加操作:


添加之前的表數據:

添加之后

修改操作:




刪除操作:



體會:做了一個簡單的增刪改查明白了每個類的作用以及聯系。bean是用將屬性的get,set等方法進行封裝。dao層,是對數據庫表操作的封裝,里面有sql語句的執行等。而DBUtil是對數據庫連接和關閉等操作的封裝。servlet是跳轉,通過調用dao層的方法實現跳轉操作。然后jsp頁面,有一個主頁面 寫超鏈接鏈接到其他頁面。當然你對數據的刪改都是在查詢的基礎上操作的,如果沒有顯示出信息就不能去刪除和修改。當然我把id設為了主鍵自增,但我沒有寫驗證主鍵的條件。另外還有什么不對的地方希望大家和老師多多指點!
轉自:https://www.cnblogs.com/tkg1314/p/12014713.html

