对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。 在这个Servlet应用示例中,我们将演示如何使用Servlet连接MySQL数据库,并执行增删改查操作。
1. Servlet CRUD示例
在MySQL数据库中创建xn_users
表。其中有5个字段:id
, name
, password
, email
以及 country
,id
字段使用序列使用自动增量。
启动Eclipse,创建一个动态Web项目:ServletCurd,完整的目录结构如下所示:
连接到MySQL,创建一个数据库:testdb,然后在这个数据库中创建一张表:xn_employee,xn_employee的字段如下:
编号 | 字段 | 类型 | 其他说明 |
---|---|---|---|
1 | id |
int(10) | 主键,自动增加 |
2 | name |
varchar(32) | 用户名 |
3 | password |
varchar(32) | 密码 |
4 | email |
varchar(254) | 邮件地址 |
5 | country |
varchar(32) | 国家 |
表:xn_employee 的创建语句如下:
CREATE TABLE `xn_employee` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT '', `password` varchar(32) DEFAULT '', `email` varchar(255) DEFAULT '', `country` varchar(255) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10026 DEFAULT CHARSET=utf8;
文件:index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Servlet+MySQL增删改查示例</title> </head> <body> <h1>新增新员工</h1> <form action="SaveServlet" method="post"> <table> <tr> <td>名字:</td> <td><input type="text" name="name" /></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password" /></td> </tr> <tr> <td>Email地址:</td> <td><input type="email" name="email" /></td> </tr> <tr> <td>国家:</td> <td><select name="country" style="width: 150px"> <option value="中国">中国</option> <option value="美国">美国</option> <option value="日本">日本</option> <option value="英国">英国</option> <option value="其他">其他</option> </select></td> </tr> <tr> <td colspan="2"><input type="submit" value="保存员工信息" /></td> </tr> </table> </form> <br /> <a href="ViewServlet">员工列表</a> </body> </html>
文件:Employee.java
package com.xntutor.dao; public class Employee { private int id; private String name, password, email, country; 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 getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
文件:EmployeeDao.java
package com.xntutor.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import com.xntutor.db.ConnectDb; public class EmployeeDao { public static Connection getConnection() { return ConnectDb.getConnection(); } public static int save(Employee e) { int status = 0; try { Connection con = EmployeeDao.getConnection(); PreparedStatement ps = con .prepareStatement("insert into xn_employee(name,password,email,country) values (?,?,?,?)"); ps.setString(1, e.getName()); ps.setString(2, e.getPassword()); ps.setString(3, e.getEmail()); ps.setString(4, e.getCountry()); status = ps.executeUpdate(); con.close(); } catch (Exception ex) { ex.printStackTrace(); } return status; } public static int update(Employee e) { int status = 0; try { Connection con = EmployeeDao.getConnection(); PreparedStatement ps = con .prepareStatement("update xn_employee set name=?,password=?,email=?,country=? where id=?"); ps.setString(1, e.getName()); ps.setString(2, e.getPassword()); ps.setString(3, e.getEmail()); ps.setString(4, e.getCountry()); ps.setInt(5, e.getId()); status = ps.executeUpdate(); con.close(); } catch (Exception ex) { ex.printStackTrace(); } return status; } public static int delete(int id) { int status = 0; try { Connection con = EmployeeDao.getConnection(); PreparedStatement ps = con.prepareStatement("delete from xn_employee where id=?"); ps.setInt(1, id); status = ps.executeUpdate(); con.close(); } catch (Exception e) { e.printStackTrace(); } return status; } public static Employee getEmployeeById(int id) { Employee e = new Employee(); try { Connection con = EmployeeDao.getConnection(); PreparedStatement ps = con.prepareStatement("select * from xn_employee where id=?"); ps.setInt(1, id); ResultSet rs = ps.executeQuery(); if (rs.next()) { e.setId(rs.getInt(1)); e.setName(rs.getString(2)); e.setPassword(rs.getString(3)); e.setEmail(rs.getString(4)); e.setCountry(rs.getString(5)); } con.close(); } catch (Exception ex) { ex.printStackTrace(); } return e; } public static List<Employee> getAllEmployees() { List<Employee> list = new ArrayList<Employee>(); try { Connection con = EmployeeDao.getConnection(); PreparedStatement ps = con.prepareStatement("select * from xn_employee"); ResultSet rs = ps.executeQuery(); while (rs.next()) { Employee e = new Employee(); e.setId(rs.getInt(1)); e.setName(rs.getString(2)); e.setPassword(rs.getString(3)); e.setEmail(rs.getString(4)); e.setCountry(rs.getString(5)); list.add(e); } con.close(); } catch (Exception e) { e.printStackTrace(); } return list; } }
文件:ConnectDb.java
package com.xntutor.db; import java.sql.Connection; import java.sql.DriverManager; public class ConnectDb { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"; // Database credentials static final String USER = "root"; static final String PASS = "123456"; public static Connection getConnection() { Connection con = null; try { // STEP 2: Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); // STEP 3: Open a connection System.out.println("Connecting to testdb database..."); con = DriverManager.getConnection(DB_URL, USER, PASS); } catch (Exception e) { e.printStackTrace(); } return con; } }
文件:SaveServlet.java
package com.xntutor.servlet; import java.io.IOException; import java.io.PrintWriter; 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 com.xntutor.dao.Employee; import com.xntutor.dao.EmployeeDao; @WebServlet("/SaveServlet") public class SaveServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf-8"); // 请求解决乱码 request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String name = request.getParameter("name"); String password = request.getParameter("password"); String email = request.getParameter("email"); String country = request.getParameter("country"); // System.out.println("name=>"+name); Employee e = new Employee(); e.setName(name); e.setPassword(password); e.setEmail(email); e.setCountry(country); int status = EmployeeDao.save(e); if (status > 0) { out.print("<p>新增记录成功!</p>"); request.getRequestDispatcher("index.html").include(request, response); } else { out.println("抱歉,新增记录失败!"); } out.close(); } }
文件:DeleteServlet.java
package com.xntutor.servlet; import java.io.IOException; import java.io.PrintWriter; 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 com.xntutor.dao.EmployeeDao; @WebServlet("/DeleteServlet") public class DeleteServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf-8"); // 请求解决乱码 request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String sid = request.getParameter("id"); int id = Integer.parseInt(sid); EmployeeDao.delete(id); out.println("删除成功!"); response.sendRedirect("ViewServlet"); } }
文件:DoEditServlet.java
package com.xntutor.servlet; import java.io.IOException; import java.io.PrintWriter; 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 com.xntutor.dao.Employee; import com.xntutor.dao.EmployeeDao; @WebServlet("/DoEditServlet") public class DoEditServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf-8"); // 请求解决乱码 request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String sid = request.getParameter("id"); int id = Integer.parseInt(sid); String name = request.getParameter("name"); String password = request.getParameter("password"); String email = request.getParameter("email"); String country = request.getParameter("country"); Employee e = new Employee(); e.setId(id); e.setName(name); e.setPassword(password); e.setEmail(email); e.setCountry(country); int status = EmployeeDao.update(e); if (status > 0) { response.sendRedirect("ViewServlet"); } else { out.println("抱歉,更新记录失败!"); } out.close(); } }
文件:EditServlet.java
package com.xntutor.servlet; import java.io.IOException; import java.io.PrintWriter; 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 com.xntutor.dao.Employee; import com.xntutor.dao.EmployeeDao; @WebServlet("/EditServlet") public class EditServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); out.println("<h1>更新员工信息</h1>"); String sid=request.getParameter("id"); int id=Integer.parseInt(sid); Employee e=EmployeeDao.getEmployeeById(id); out.print("<form action='DoEditServlet' method='post'>"); out.print("<table>"); out.print("<tr><td></td><td><input type='hidden' name='id' value='"+e.getId()+"'/></td></tr>"); out.print("<tr><td>名字:</td><td><input type='text' name='name' value='"+e.getName()+"'/></td></tr>"); out.print("<tr><td>密码:</td><td><input type='password' name='password' value='"+e.getPassword()+"'/></td></tr>"); out.print("<tr><td>Email:</td><td><input type='email' name='email' value='"+e.getEmail()+"'/></td></tr>"); out.print("<tr><td>国家:</td><td>"); out.print("<select name='country' style='width:150px'>"); out.print("<option value='中国'>中国</option>"); out.print("<option value='美国'>美国</option>"); out.print("<option value='日本'>日本</option>"); out.print("<option value='英国'>英国</option>"); out.print("<option value='其他'>其他</option>"); out.print("</select>"); out.print("</td></tr>"); out.print("<tr><td colspan='2'><input type='submit' value=/"修改保存/"/></td></tr>"); out.print("</table>"); out.print("</form>"); out.close(); } }
文件:ViewServlet.java
package com.xntutor.servlet; import java.io.IOException; import java.io.PrintWriter; 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; import com.xntutor.dao.Employee; import com.xntutor.dao.EmployeeDao; @WebServlet("/ViewServlet") public class ViewServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); out.println("<a href='index.html'>添加新员工</a>"); out.println("<h2>员工管理列表</h2>"); List<Employee> list=EmployeeDao.getAllEmployees(); out.print("<table border='1' width='100%'"); out.print("<tr><th>编号</th><th>姓名</th><th>密码</th><th>Email</th><th>国家</th><th>操作</th></tr>"); if(list.size()>0) { for(Employee e:list){ out.print("<tr><td>"+e.getId()+"</td><td>"+e.getName()+"</td><td>"+e.getPassword()+"</td>" + "<td>"+e.getEmail()+"</td><td>"+e.getCountry()+"</td><td><a href='EditServlet?id="+e.getId()+"'>编辑</a> | <a href='DeleteServlet?id="+e.getId()+"'>删除</a></td></tr>"); } }else { out.print("<tr><td colspan=6>暂无数据</td></tr>"); } out.print("</table>"); out.close(); } }
2. 运行结果
右键单击项目:ServletCurd,选择“Run As/Run on Server”,等待Apache Tomcat启动完成后,打开浏览器访问以下网址:
如果程序没有错误,应该会看到(index.html
)显示的结果。即增加新员工信息:
填写一些新员工信息,然后提交保存。点击员工列表,应该可以看到所有员工信息列表:
删除和修改操作如下图所示:
3. 注意事项
- 需要将Java连接MySQL驱动器(
mysql-connector-java-8.0.18.jar
)放到项目的目录Servlet/WebContent/WEB-INF/lib
中。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/264032.html