假设我们现在有一个数据库内的表叫student的表,现在需要我们使用javaEE来对数据库内的student表进行增删改查功能的实现。
数据库内的数据如下
数据库的属性如下
注:id有设置自动递增
要对数据库内的数据进行最基本的增删改查。
首先先创建一个新的项目
把web文件夹创建出来
注意:需要tomcat(如果没有需要去官网下载Tomcat的包)
然后在web的WEB-INF目录下新建一个lib包
在然后找到刚刚下载的tomcat包下有一个lib包
在包内找到一下两个jar包
将两个jar包导入web目录下的lib包内(就是我们刚刚新建的包)
同时还需要一个mysql-connector-java-5.1.6-bin包
将三个包导入lib包内
然后右击添加
然后接下来看看Tomcat是否已经配置好了
点击此处
找到tomcat service(不是TomEE,图标一样,别搞错了)
然后找到tomcat的路径选择
再点一下右下角fix
然后右上角变成Tomcat就可以了
然后再次在src目录下新建目录Com包
再在Com目录下分别创建conn和servlet两个包
(名字无所谓,可以随意更改,但是最好见名知意)
在conn目录下新建一个Conn的class类
package Com.conn;
import java.sql.*;
public class Conn {
//这个类提供两个函数,一个用于查询,一个用于增删改
String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"; //数据库名需要改成自己的
String username="username"; //你的数据库用户名
String password="123456"; //数据库密码
Connection conn=null;
Statement stmt=null;
public Conn() {
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection(url,username,pwd);
stmt=conn.createStatement();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public ResultSet executeQuery(String sql){
try {
return stmt.executeQuery(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
public int executeUpdate(String sql){
try {
return stmt.executeUpdate(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return 0;
}
}
conn类负责连接数据库。
然后就可以去web文档下的index.jsp开始写前端了。
可以看得出,结构就html
直接像写网页一样,在body中写一个table表格来展示数据
接下来就该获取数据库中的数据并展示
(jsp中可以使用<%%>中写java代码)
这个时候就可以开始获取数据并展示出来了
此时代码如下
<body>
<%
request.setCharacterEncoding("utf-8"); //设置编码
Conn conn = new Conn(); //建立连接
String sql ="select * from novel"; //查询所有的数据
ResultSet rs =conn.executeQuery(sql);
%>
<table>
<tr>
<td>序号</td><td>书名</td><td>作者</td><td>价格</td>
</tr>
<%
while(rs.next()){ //遍历出查询结果
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
<td><%=rs.getString(4)%></td>
</tr>
<%
}
%>
</table>
</body>
运行看看
成功把结果展示出来了
然后想增加数据怎么办呢?其实也很简单
只要知道操作的逻辑,就知道该怎么写了。
首先。添加是通过index界面的添加按钮,然后跳转到添加界面的jsp,jsp页面负责将需要用到的数据提交servlet,然后再通过servlet来获取我们输入的内容,再使用sql语句来对数据库进行更改。
index页面用于展示基本功能和信息,然后通过点击相关事件,然后跳转到相应的jsp然后再把数据提交到servlet处,servlet又通过sql语句来达到操作数据库的目的。
那么,我们现在index页面写一个按钮,然后新建一个新的jsp页面取名为AddNovel并把这个按钮指向这个新建的jsp页面
新建一个jsp(AddNovel)
然后吧index界面添加按钮也用form表单提交至改界面
然后在servlet包下新建一个servlet
然后再
WebServlet(name = "AddNovelServlet"后面添加urlPatterns, 如下
然后回到AddNovelS.jsp处用form表单提交数据
method后可以选择提交方式。可以选post也可以选get
但是记得要相应的位置进行下一步操作
如果form表单内用post方式提交那么servlet内也应该在dopost内,同理如果提交方式为get。那servlet内也有应该在doget内进行操作。
我们提交的方式是post,那么在servlet内也也在post中
<body>
<form method="post" action="Add">
书名<input type="text" name="name"><br>
作者<input type="text" name="author"><br>
价格<input type="text" name="price"><br>
<input type="submit" value="提交">
</form>
</body>
然后servlet的代码是
@WebServlet(name = "AddNovelServlet",urlPatterns = "/Add")
public class AddNovelServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Conn conn=new Conn();
request.setCharacterEncoding("UTF-8");
//定义变量,接jsp传过来的值
String name=request.getParameter("name");
String author=request.getParameter("author");
String price=request.getParameter("price");
String sql="insert into novel(name,author,price) values('"+name+"','"+author+"','"+price+"')";
conn.executeUpdate(sql);
System.out.println(sql);
response.sendRedirect("index.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
运行看看是否有问题
可以看出没有什么问题,输入的内容成功添加到了数据库内
那么添加功能就可以了。
接下来就是删除
依旧是之前那套逻辑。
先在index页面做出相应的点击事件
在价格后面多加一行操作行,用于专门的操作
然后再展示后面加一行删除
这里的a标签的delete?did之后再说
这里再新建一个servlet,命名为DeleteNovel
在DeleteNovelservlet页面的同样也在开头处写上urlurlPatterns="/delete"(这里写的名字要跟跳转那边名字像相同)
然后再doget内写删除的逻辑,至于为什么是在doget,可以在doget和dopost分别写输出语句,然后运行看看。
在doget内写的的代码逻辑跟添加是时相同,servlet内其实就是考sql语句来进行对数据库操作
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//删除
String did=request.getParameter("did");
Conn conn=new Conn();
conn.executeUpdate("delete from novel where id="+did);
response.sendRedirect("index.jsp");
}
依旧是定义一个变量did,然后获取did,这did就是之前上面说的,delete?之后传过来的值。这里定义的did也是为了来接这个传过来的值。
然后就是删除的sql语句。用拼接的方式来选择删哪一条。
然后就完成了。
去测试一下。
没有报错,所以删除功能也完成了。
这里之所以没有新建一个dele的jsp是因为删除不需要输入数值,直接获取id然后的通过sql语句删除即可。
接下来就到修改功能
逻辑也基本上跟添加相似,所以直接上index快速过(创建一个update.jsp和servlet)(所有相关代码在页尾
上面说了修改和添加很相似,那么就有不太一样的地方,不太一样的地方就中间的jsp页面
我们添加的界面是只有三个文本框让让我们输入,我们只需要把文本框内的内容跟sql语句拼接一下
而修改则是我们需要先原本的数据获取出来,然后再把原本的数据修改
所以我们需要先在jsp页面查找,就跟之前删除的时候利用id定位哪条数据一样,我们先在index页面获取到第几页数据的id然后再jsp搜索相关数据,最后再把数据展示出来,原本的数据被修改再把修改后的传到servlet。
所以修改update的jsp代码如下
<body>
<%
Conn conn =new Conn();
String mid=request.getParameter("mid");
ResultSet resultSet=conn.executeQuery("select * from novel where id='"+mid+"'");
resultSet.next();
%>
<form method="post" action="modify">
书名<input type="text" name="name" value="<%=resultSet.getString(2)%>"><br>
作者<input type="text" name="author" value="<%=resultSet.getString(3)%>"><br>
价格<input type="text" name="price" value="<%=resultSet.getString(4)%>"><br>
<input type="hidden" name="mid" value=<%=resultSet.getString(1)%> >
<input type="submit" value="修改">
</form>
</body>
Updateservlet代码如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//写修改逻辑
request.setCharacterEncoding("UTF-8");
String mid=request.getParameter("mid");
String name=request.getParameter("name");
String author=request.getParameter("author");
String price=request.getParameter("price");
String sql="update novel set name='"+name+"',author='"+author+"',price='"+price+"' where id="+mid;
System.out.printf(sql);
Conn conn=new Conn();
conn.executeUpdate(sql);
response.sendRedirect("index.jsp");
}
老规矩,试运行一下
没问题。
其实到这里增删改查已经完成了。
但是呢按条件查询呢?
其实也是有的。但是不打算说了,基本原理都差不读,接下来放完整代码
----------------------------------------------------分割线---------------------------------------------------------
Conn类
package Com.conn;
import java.sql.*;
public class Conn {
//这个类提供两个函数,一个用于查询,一个用于增删改
String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"; //数据库名需要改成自己的
String username="username"; //你的数据库用户名
String password="123456"; //数据库密码
Connection conn=null;
Statement stmt=null;
public Conn() {
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection(url,username,pwd);
stmt=conn.createStatement();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public ResultSet executeQuery(String sql){
try {
return stmt.executeQuery(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
public int executeUpdate(String sql){
try {
return stmt.executeUpdate(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return 0;
}
}
index.jsp
<%@ page import="java.sql.*" %>
<%@ page import="com.util.Conn" %><%--
Created by IntelliJ IDEA.
User: dell
Date: 2022/9/22
Time: 14:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>小说列表</title>
<script>
//批量删除
function DeleteIds(){
var idinfo="";
var ids =document.getElementsByName('id');
for (var i =0;i<ids.length;i++){
if (ids[i].checked){
idinfo+=ids[i].value+",";
}
}
window.location="batchDel?id="+idinfo;
}
</script>
<style>
.css1{
margin: auto;
text-align: center;
border: solid black 1px;
}
td{
border: solid black 1px;
}
</style>
</head>
<body>
<%
//查询
request.setCharacterEncoding("utf-8");
Conn conn=new Conn();
String sql ="select * from novel";
String searchInfo =request.getParameter("searchInfo");
//定义模糊查询
String islike =request.getParameter("islike");
String option =request.getParameter("option");
//模糊查询
if ("search".equals(request.getParameter("action"))&&!searchInfo.isEmpty()){
if (islike==null){
sql += " where "+option+" ='"+searchInfo+"'";
}else{
sql+= " where "+option+" like '%"+searchInfo+"%'";
}
}
ResultSet rs=conn.executeQuery(sql);
%>
<table class="css1">
<caption>热门小说推荐</caption>
<tr>
<td colspan="6">
<form method="post" action="index.jsp?action=search">
搜索<input type="text" name="searchInfo" value="">
<select name="option">
<option value="name ">书名</option>
<option value="author">作者</option>
<option value="price">价格</option>
</select>
模糊查询<input type="checkbox" name="islike" value="islike">
<input type="submit" name="" value="提交">
</form>
</td>
</tr>
<tr>
<td>复选</td><td>序号</td><td>书名</td><td>作者</td><td>价格</td><td>操作</td>
</tr>
<%
while(rs.next()){
%>
<tr>
<td><input type="checkbox" name="id" value=<%=rs.getString(1)%> class="ids"> </td>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
<td><%=rs.getString(4)%></td>
<td><a href=<%="delete?did="+rs.getString(1)%>>删除</a>
<a href=<%="UpdataNovel.jsp?mid="+rs.getString(1)%>>修改</a>
</td>
</tr>
<%
}
%>
<tr>
<%-- <td colspan="3"><a href="AddNovel.jsp">添加新书</a> </td>--%>
<td colspan="3">
<form action="AddNovel.jsp">
<input type="submit" value="添加新书">
</form>
</td>
<td colspan="3"><input type="button" value="批量删除" onclick="DeleteIds()"></td>
</tr>
</table>
</body>
</html>
AddNovel.jsp
<%--
Created by IntelliJ IDEA.
User: misaki
Date: 2022/9/28
Time: 16:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加新书</title>
</head>
<body>
<form method="post" action="add">
书名<input type="text" name="name"><br>
作者<input type="text" name="author"><br>
价格<input type="text" name="price"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
AddNovelServlet
package com.servlet;
import com.util.Conn;
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;
@WebServlet(name = "AddNovelServlet",urlPatterns = "/add")
public class AddNovelServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//新增逻辑
Conn conn=new Conn();
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("name");
String author=request.getParameter("author");
String price=request.getParameter("price");
String sql="insert into novel(name,author,price) values('"+name+"','"+author+"','"+price+"')";
conn.executeUpdate(sql);
System.out.println(sql);
response.sendRedirect("index.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
DeleteNovelServlet
package com.servlet;
import com.util.Conn;
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;
@WebServlet(name = "DeleteNovelServlet",urlPatterns = "/delete")
public class DeleteNovelServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//做删除操作
String did=request.getParameter("did");
Conn conn=new Conn();
conn.executeUpdate("delete from novel where id="+did);
response.sendRedirect("index.jsp");
}
}
UpdataNovel.jsp
<%@ page import="com.util.Conn" %>
<%@ page import="java.sql.ResultSet" %><%--
Created by IntelliJ IDEA.
User: misaki
Date: 2022/9/28
Time: 16:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>更新书籍页</title>
</head>
<body>
<%
Conn conn =new Conn();
String mid=request.getParameter("mid");
ResultSet resultSet=conn.executeQuery("select * from novel where id='"+mid+"'");
resultSet.next();
%>
<form method="post" action="modify">
书名<input type="text" name="name" value="<%=resultSet.getString(2)%>"><br>
作者<input type="text" name="author" value="<%=resultSet.getString(3)%>"><br>
价格<input type="text" name="price" value="<%=resultSet.getString(4)%>"><br>
<input type="hidden" name="mid" value=<%=resultSet.getString(1)%> >
<input type="submit" value="修改">
</form>
</body>
</html>
UpdateNovelServlet
package com.servlet;
import com.util.Conn;
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;
@WebServlet(name = "UpdateNovelServlet",urlPatterns = "/modify")
public class UpdateNovelServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//写修改逻辑
request.setCharacterEncoding("UTF-8");
String mid=request.getParameter("mid");
String name=request.getParameter("name");
String author=request.getParameter("author");
String price=request.getParameter("price");
String sql="update novel set name='"+name+"',author='"+author+"',price='"+price+"' where id="+mid;
System.out.printf(sql);
Conn conn=new Conn();
conn.executeUpdate(sql);
response.sendRedirect("index.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
BatchDelServlet(批量删除)
package com.servlet;
import com.util.Conn;
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;
@WebServlet(name = "BatchDelServlet",urlPatterns = "/batchDel")
public class BatchDelServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String ids =request.getParameter("id");
String [] id =ids.split(",");
Conn conn =new Conn();
String sql ="delete from novel where id =-100";
for (int i =0;i<id.length;i++){
sql += " or id ="+id[i];
System.out.println("4444444444444444");
}
conn.executeUpdate(sql);
response.sendRedirect("index.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
数据库
DROP TABLE IF EXISTS `novel`;
CREATE TABLE `novel` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(12) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`author` varchar(12) DEFAULT NULL,
`price` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of novel
-- ----------------------------
INSERT INTO `novel` VALUES ('1', '《知音漫客》', '知音', '25');
INSERT INTO `novel` VALUES ('2', '《斗破苍穹》', '天蚕土豆', '30');
INSERT INTO `novel` VALUES ('3', '《操作系统》', '葛季栋', '26');
INSERT INTO `novel` VALUES ('4', '《当青春幻想具现化》', '转角吻猪', '30');
INSERT INTO `novel` VALUES ('5', '《自我本我超我》', '无名', '99');
INSERT INTO `novel` VALUES ('6', '《没头脑和不高兴》', '无名', '99');
Comments | NOTHING