第6章 JDBC访问数据库技术(3)-封装类实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018年4月15日
2
新建一个Dynamic Web Project 名为 hello6,将MySQl数据库驱动 文件复制到WebContent/web-inf/lib目录中, 2. 在Java Resources/src下目录cap.db下新建一个类DBCon.java,用 于封装数据库连接。主要代码如下: package cap.db; import java.sql.*; ublic class DBCon {//数据库连接字符串的定义 private String driver="com.mysql.jdbc.Driver"; private String url="jdbc:mysql://127.0.0.1:3306/cap"; private String user="root"; private String pass="admin"; private Connection conn=null;
第6章 JDBC 数据库访问技术
6.1 JDBC基础知识 6.2 脚本方式实现数据库增删改查 6.3 封装类实现增删改查 6.4 脚本方式实现分页 6.5 预编译进行数据库的增删改查 6.6 连接池的使用 6.7 调用存储过程 6.8 JDBC事务
2018年4月15日 1
6.3 封装类实现增删改查
}
2018年4月15日 4
//数据库更新 public int doUpdate(String sql){ conn=this.getConnection(); Statement stmt= null; int res=0; try { stmt = conn.createStatement(); res=stmt.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } return res; }
2018年4月15日
6
<table> <% while (rs.next()) { %> <tr> <td><%=rs.getInt("id")%> </td> <td><%=rs.getString("username")%> </td> <td><%=rs.getString("password")%></td> <td> <a href=“do_delete.jsp?id=<%=rs.getInt(”id“)%>”>删除</a> </td> <td><a href=“do_edit.jsp?id=<%=rs.getInt(”id“)%>”>编辑</a> </td> </tr> <% } dbc.close(); %> </table> <a href="addAddmin.jsp">添加用户</a> </body>
2018年4月15日 7
(2) do_edit.jsp <%@ page import="cap.db.DBCon,java.sql.ResultSet,java.sql.*" %> <% request.setCharacterEncoding("UTF-8"); int id=Integer.parseInt(request.getParameter("id")); DBCon dbc=new DBCon(); String sql="select * from admin where id="+id; ResultSet rs=dbc.doQuery(sql); if(rs.next()){ %> <form action="do_update.jsp" method="post"> <input type="hidden" name="id" value="<%=rs.getInt("id")%>"> <input type="text" name="username" value="<%=rs.getString("username")%>"> <input type="text" name="password" value="<%=rs.getString("password")%>"> <input type="submit" value="更新"> </form> <% } dbc.close(); %>
2018年4月15日
12
6.4 分页技术来自百度文库现
在实际应用中,如果从数据库中查询得到的记录特 别多,甚至超过了显示器屏幕范围,这时可将结果 分页显示。本例使用的数据库以及表是上一节使用 的cap数据库和admin表。 假设总记录数为totalCount,每页显示记录的数量为 PageSize,总页数为PageCount,那么总页数的计 算公式为: 如果(totalCount % PageSize)>0,则intPageCount= totaCount / PageSize+1。 如果(totalCount % PageSize)=0,则PageCount= totalCount / PageSize。
2018年4月15日 8
(3) do_update.jsp <%@ page import="cap.db.DBCon,java.sql.*" %> <%request.setCharacterEncoding("UTF-8"); int id = Integer.parseInt(request.getParameter("id")); String username = request.getParameter("username"); String password = request.getParameter("password"); DBCon dbc = new DBCon(); String sql = "update admin set username='" + username + "',password='" + password + "' where id=" + id; int res = dbc.doUpdate(sql); if (res > 0) response.sendRedirect("do_query.jsp"); else out.println("更新失败"); dbc.close(); %>
1.
2018年4月15日
3
{//数据库查询 public ResultSet doQuery(String sql){ conn=this.getConnection(); Statement stmt= null; ResultSet rs=null; conn=DriverManager.getConnection(u try { rl,user,pass); stmt = conn.createStatement(); } catch (ClassNotFoundException e) { rs=stmt.executeQuery(sql); e.printStackTrace(); } catch (SQLException e) { } catch (SQLException e) { e.printStackTrace(); e.printStackTrace(); } } return conn; return rs; } //数据库连接 public Connection getConnection(){ try { Class.forName(driver);
//关闭 public void close(){ if(conn!=null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
2018年4月15日
5
3.
新建JSP页,如do_query.jsp、 do_edit.jsp、 do_insert.jsp、 do_update.jsp、 addAdmin.jsp、 do_delete.jsp等(或从hello5种 复制过来再修改主要代码)。各个JSP页面部分代码为: (1) do_query.jsp
2018年4月15日 13
【例】分页显示实例(pager.jsp,DBCon.java) <% int pageCount = 0;//总的页面数 int pageSize = 5;//每页显示的记录数 int currentP = 1;//当前页面 int totalCount = 0;//表中中的记录数 DBCon dbc = new DBCon();//数据库链接 String sql = "select count(*) as t from admin";//查询表中总的记录数 ResultSet rs = dbc.doQuery(sql); if (rs.next()) totalCount = rs.getInt("t");//获取总的记录数 if (totalCount / pageSize == 0)/* 根据总的记录数来计算页面数 */ pageCount = (totalCount / pageSize); Else pageCount = (totalCount / pageSize) + 1; //获得分页条上的当前页码 String pStr = request.getParameter("p");
<%@ page import="cap.db.*,java.sql.*"%>
<body> <% request.setCharacterEncoding("UTF-8"); DBCon dbc = new DBCon(); String sql = "select * from admin order by id"; ResultSet rs = dbc.doQuery(sql); %>
2018年4月15日
10
(5) do_insert.jsp <%@ page import="cap.db.DBCon,java.sql.*" %> <% request.setCharacterEncoding("UTF-8"); String username=request.getParameter("username"); String password=request.getParameter("password"); DBCon dbc=new DBCon(); String sql="insert into admin(username,password) values('"+username+"','"+password+"')"; int res=dbc.doUpdate(sql); if(res>0) response.sendRedirect("do_query.jsp"); else out.println("添加失败"); %>
2018年4月15日
11
(6) do_delete.jsp <%@ page import="cap.db.DBCon,java.sql.*" %> <%request.setCharacterEncoding("UTF-8"); int id=Integer.parseInt(request.getParameter("id")); DBCon dbc=new DBCon(); String sql="delete from admin where id="+id; int res=dbc.doUpdate(sql); if(res>0) response.sendRedirect("do_query.jsp"); else out.println("删除失败"); %>
2018年4月15日
9
(4) addAdmin.jsp <body> <form action="do_insert.jsp" method="post"> <input type="text" name="username"><br> <input type="text" name="password"><br> <input type="submit" value="添加"> </form> </body>
在上一节数据库操作中需要在JSP页面完成 关闭 与数据库的连接,若不关闭连接,在等待页实例被垃 圾回收处理期间可能会导致数据库连接超过连接限制 ,且将代码放在页面中,不利于扩展及连接的共享, 性能低,将连接字符串、SQL语句暴露在页面中不利 于数据库的安全,连接代码需要重复书写,不利于代 码重用等不利因素,影响程序的复用性和软件的灵活 性。因此将数据库连接访问代码封装在类中,可以避 免以上问题。