html(四)数据库curd操作与分页查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了html(四)数据库curd操作与分页查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8899字,纯文字阅读大概需要13分钟。
内容图文
数据库操作curd :
1.首先要建立项目处理好自己逻辑包:
其中util工具包中建立两个工具类 jdbc连接和page分页
DBUtil.java:
db工具类就是用于连接数据库的jdbc架包,里面是curd的实现。
1 package com.etc.utils; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 import javax.sql.rowset.CachedRowSet; 10 11 import com.sun.rowset.CachedRowSetImpl; 12 13 /** 14 * 数据库访问的通用类 15 * 16 * @author Administrator 17 * 18 */ 19 public class DBUtil { 20 private final static String URL = "jdbc:mysql://localhost/day07"; 21privatefinalstatic String USER = "root"; 22privatefinalstatic String PASSWORD = "123456"; 23privatefinalstatic String DRIVER = "com.mysql.jdbc.Driver"; 24 25/** 26 * 定义方法返回一个连接(Connection)对象 27 * 28 * @return 返回值就是一个连接对象 29*/ 30privatestatic Connection getConnection() { 31 Connection conn = null; 32try { 33 Class.forName(DRIVER); 34 conn = DriverManager.getConnection(URL, USER, PASSWORD); 35 } catch (ClassNotFoundException e) { 36 e.printStackTrace(); 37 } // 低版本的jdbc jar包 38catch (SQLException e) { 39 e.printStackTrace(); 40 } 41return conn; 42 } 43 44/** 45 * 一个方法来做增加删除和修改 46 * 47 * @param sql 要执行的sql 48 * @param param 执行的sql中包含的参数的实际值 49 * @return int 表示的是受影响的行 50*/ 51publicstaticint execUpdate(String sql, Object... param) { 52 Connection conn = getConnection(); 53 PreparedStatement pstmt = null; 54int result = 0; 55try { 56 pstmt = conn.prepareStatement(sql); 57for (int i = 0; i < param.length; i++) { 58 pstmt.setObject(i + 1, param[i]); 59 } 60 result = pstmt.executeUpdate(); 61 } catch (SQLException e) { 62 e.printStackTrace(); 63 } finally { 64 closeAll(null, pstmt, conn); 65 } 66return result; 67 } 68 69/** 70 * 一个方法来做查询 71 * 72 * @param sql 要执行查询的sql语句 73 * @param param 要执行sql对应的参数 74 * @return CachedRowSet 缓存的结果集 75*/ 76publicstatic CachedRowSet execQuery(String sql, Object... param) { 77 Connection conn = getConnection(); 78 PreparedStatement pstmt = null; 79 ResultSet rs = null; 80// 实例化CachedRowSetImpl 81 CachedRowSetImpl crs = null; 82try { 83 crs = new CachedRowSetImpl(); 84 pstmt = conn.prepareStatement(sql); 85// 可以吧param当成是一个数组 86 System.out.println(param.length); 87 88for (int i = 0; i < param.length; i++) { 89 pstmt.setObject(i + 1, param[i]); 90 } 91 rs = pstmt.executeQuery(); 92// 建立rs和crs关系,可以将rs的数据行缓存到crs中了 93 crs.populate(rs); 94 } catch (SQLException e) { 95 e.printStackTrace(); 96 } finally { 97// 释放资源等 此处代码省略 98 closeAll(rs, pstmt, conn); 99 } 100return crs; 101 } 102103/**104 * 释放资源 105 * 106 * @param rs 结果集兑现 107 * @param pstmt 预处理语句对象 108 * @param conn 连接对象 109*/110privatestaticvoid closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) { 111try { 112if (rs != null) 113 rs.close(); 114 } catch (SQLException e) { 115 e.printStackTrace(); 116 } 117try { 118if (pstmt != null) 119 pstmt.close(); 120 } catch (SQLException e) { 121 e.printStackTrace(); 122 } 123try { 124if (conn != null) 125 conn.close(); 126 } catch (SQLException e) { 127 e.printStackTrace(); 128 } 129 } 130131 }
Page.java:
通过字段分页的总页数、总数、页面显示数、所有数据集合来实例化实现分页显示。
1 package com.etc.utils; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Page<T> { 7// 总页数 8privateint totalPageCount = 1; 9// 页面大小,即每页显示记录数10privateint pageSize = 10; 11// 记录总数12privateint totalCount = 0; 13// 当前页码14privateint currPageNo = 1; 15// 每页集合16 List<T> list = new ArrayList<>(); 1718publicint getTotalPageCount() { 19return totalPageCount; 20 } 21publicvoid setTotalPageCount(int totalPageCount) { 22this.totalPageCount = totalPageCount; 23 } 24publicint getPageSize() { 25return pageSize; 26 } 27publicvoid setPageSize(int pageSize) { 28this.pageSize = pageSize; 29 } 30publicint getTotalCount() { 31return totalCount; 32 } 33publicvoid setTotalCount(int totalCount) { 34this.totalCount = totalCount; 35 } 36publicint getCurrPageNo() { 37return currPageNo; 38 } 39publicvoid setCurrPageNo(int currPageNo) { 40this.currPageNo = currPageNo; 41 } 42public List<T> getList() { 43return list; 44 } 45publicvoid setList(List<T> list) { 46this.list = list; 47 } 484950 }
User.java:
实现包 entityr User就是普通的user类定义了查询用户的id,username,password 根据自己数据库的表建立相对应的自段。
1 package com.etc.entity; 2 3 public class User { 4 private int uid=0; 5private String username; 6private String password; 7 8public User(int uid, String username, String password) { 9super(); 10this.uid = uid; 11this.username = username; 12this.password = password; 13 } 1415public User() { 16super(); 17 } 1819publicint getUid() { 20return uid; 21 } 2223publicvoid setUid(int uid) { 24this.uid = uid; 25 } 2627public String getUsername() { 28return username; 29 } 3031publicvoid setUsername(String username) { 32this.username = username; 33 } 3435public String getPassword() { 36return password; 37 } 3839publicvoid setPassword(String password) { 40this.password = password; 41 } 42434445 }
数据库设计:
2.建立最重要的DAO层(数据访问层):
因为传入的是User类 所以值都是user.get方法来获取界面传入的值:
DBUtil.execUpdate("insert into t_user(username,password) values(?,?)", user.getUsername(), user.getPassword());
登陆时需要验证账号密码是否正确,此时需要对数据库的数据进行验证,如果正确返回user对象,不正确则返回null:
UserDao:
1 package com.etc.dao; 2 3 import java.sql.SQLException; 4 5 import javax.sql.rowset.CachedRowSet; 6 7 import com.etc.entity.User; 8 import com.etc.utils.DBUtil; 9 import com.etc.utils.Page; 10 11 public class UserDao { 12 // 设置注册实现 13 public void reg(User user) { 14 // 通过工具类DBUtil的execUpdate方法,传入sql和值(username,password) 15 DBUtil.execUpdate("insert into t_user(username,password) values(?,?)", user.getUsername(), user.getPassword()); 16 } 17//设置登陆实现18public User login(String username, String password) { 19//传入你登陆要验证的账号密码,此时会通过sql语句来通过账号密码来判断是否存在 存在就继续向下执行 不存在就返回null20 CachedRowSet rowSet = DBUtil.execQuery("select * from t_user where username=? and password=?", username, 21 password); 22try { 23//循环获取值 直到账号密码全部一致24while (rowSet.next()) { 25//获取数据库的uid,username,password26int uid = rowSet.getInt("uid"); 27 String username2 = rowSet.getString("username"); 28 String password2 = rowSet.getString("password"); 29//将值传入新实例化的user对象中30 User user = new User(uid, username2, password2); 31//返回user对象32return user; 33 } 34 } catch (SQLException e) { 35 e.printStackTrace(); 36 } 37returnnull; 38 } 39//分页显示数据40public Page<User> queryByPage(Page<User> page) { 41///通过sql语句 count(1)计算数据中所有的所有数据总数42 CachedRowSet rowSet = DBUtil.execQuery("select count(1) from t_user"); 43try { 44//获取查询出来的总数45while (rowSet.next()) { 46//sql中默认将第一个值设置为第一列47int total = rowSet.getInt(1); 48//将总数传入page中49 page.setTotalCount(total); 50 } 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 } 54//通过sql语句限制查询的每页的数量 ( limit ?,? )方法 55//传入的值 (page.getCurrPageNo()-1)*page.getPageSize() , page.getPageSize() 56// (页数-1) * 显示的数量 57 CachedRowSet rowSet2 = DBUtil.execQuery("select * from t_user limit ?,?", (page.getCurrPageNo()-1)*page.getPageSize(),page.getPageSize()); 5859try { 60//循环遍历61while (rowSet2.next()) { 62int uid = rowSet2.getInt("uid"); 63 String username2 = rowSet2.getString("username"); 64 String password2 = rowSet2.getString("password"); 65 User user = new User(uid, username2, password2); 66//在page中的集合添加每个页面显示的值67 page.getList().add(user); 68 } 69 } catch (SQLException e) { 70 e.printStackTrace(); 71 } 72return page; 73 } 74 }
main.jsp:
1 <% @page import = " com.etc.entity.User " %> 2 <% @page import = " com.etc.utils.Page " %> 3 <% @page import = " com.etc.dao.UserDao " %> 4 <% @ page language = " java " contentType = " text/html; charset=UTF-8 " 5 pageEncoding = " UTF-8 " %> 6 <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > 7 < html > 8 < head > 9 < meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" > 10 < title >Insert title here</title>11</head>12<body>13<%14//实例化一个usredao和page才能使用其方法 15 UserDao userDao =new UserDao(); 16 Page<User> pa =new Page<>(); 1718//获取页面默认返回值pageNo 19String pageNo = request.getParameter("pageNo"); 2021//如果第一次登陆或者没登陆时 将显示的页面设为1 22if (pageNo ==null || "".equals(pageNo)) { 23 pa.setCurrPageNo(1); 2425 } else { 26//如果不是第一次登陆 设置显示的值为你选择的值 27 pa.setCurrPageNo(Integer.valueOf(pageNo)); 28 } 2930//将page传入dao中 31 userDao.queryByPage(pa); 3233//循环遍历分页集合中的值 34for (User u : pa.getList()) { 35 out.print(u.getUid() +","+ u.getUsername() +","+ u.getPassword() +"<br>"); 36 } 37%>3839 当前第<%=pa.getCurrPageNo()%>页 40<br>41<%--将页面默认返回pageNo设置为pa.getCurrPageNo() - 1来设为当前页面的页面数 42 从而传给userdao 来获取当前页数 计算需要遍历的行数为 0-10还是10-20--%>43<a href="?pageNo=<%=pa.getCurrPageNo() - 1%>">上一页</a>44<a href="?pageNo=<%=pa.getCurrPageNo() + 1%>">下一页</a>45</body>46</html>
里面的注册 、登陆在上一篇已经提到了 所以这两篇可以合成一个项目 就是最上边显示的项目图。
原文:https://www.cnblogs.com/LiuOOP/p/11020182.html
内容总结
以上是互联网集市为您收集整理的html(四)数据库curd操作与分页查询全部内容,希望文章能够帮你解决html(四)数据库curd操作与分页查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。