数据库异常----用尽的resultset的几种解决方法

数据库异常:用尽的 Resultset 出现的几种情况:

1 没有判断游标是否已经到了最后一个。在最后一条记录取出后仍然调用rs.next();
2 ResultSet定义为全局变量。多个数据集共用一个结果集;
3 ResultSet rs = stmt.executeQuery(sql);
  这个方法写完后一定要先判断rs是否为null。如果没有结果集仍然调用rs.next(),则会异常;
4 每个方法最后一定要close掉rs并且close的顺序是1 rs ; 2 pstmt ; 3 conn 如果直接close掉conn,那么缓存中会存在大量的游标,导致程序混乱; 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改查了。代码看着也很简洁。 例如: 增删改查使用的类:QueryRunner类+ResultSetHandler类,使用这俩类就可以解决掉。 QueryRunner类的query()方法:new QueryRunner().query(Connection conn, String sql, ResultSetHandler rsh) query方法后面参数中加一个Connection连接,是在获取不到数据源的情况下,也就是说,QueryRunner的实例化构造函数使用无参的那个,下面我的实现代码就是用的这种方法。 当然还有一种实例化:new QueryRunner(new Datasource()).query(String sql, ResultSetHandler rsh) query方法中的参数 ResultSetHandler 参数中加上ResultSetHandler接口的实现类参数(下面这些实现类),执行完SQL后,返回的数据就是已经封装好的我们想要的结果了。 ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成Bean对象 BeanListHandler :将ResultSet中所有的数据转化成List ColumnListHandler :将ResultSet中某一列的数据存成List KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map,Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map MapListHandler :将ResultSet中所有的数据存成List<Map> ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
好的,我会为你介绍如何使用Java连接数据库并实现QQ登录的功能。 1. 首先,需要在Java项目中引入相应的数据库驱动包,比如MySQL的驱动包。 2. 在Java代码中使用JDBC连接数据库。 ```java // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password"); ``` 其中,`mydb`为要连接的数据库名称,`root`和`password`分别为数据库的用户名和密码。 3. 编写登录界面,并将用户名和密码传入Java代码。 ```java // 获取用户名和密码 String username = usernameField.getText(); String password = passwordField.getText(); ``` 4. 在Java代码中查询数据库中是否存在该用户,并验证密码是否正确。 ```java // 查询数据库中是否存在该用户 String sql = "select * from user where username = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { // 验证密码是否正确 String pwd = rs.getString("password"); if (password.equals(pwd)) { // 登录成功 } else { // 密码错误 } } else { // 用户不存在 } ``` 其中,`user`为数据库中的表名,`username`和`password`分别为表中的字段名。 5. 最后,根据验证结果输出相应的提示信息。 完整代码示例: ```java // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password"); // 获取用户名和密码 String username = usernameField.getText(); String password = passwordField.getText(); // 查询数据库中是否存在该用户 String sql = "select * from user where username = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { // 验证密码是否正确 String pwd = rs.getString("password"); if (password.equals(pwd)) { // 登录成功 JOptionPane.showMessageDialog(null, "登录成功!"); } else { // 密码错误 JOptionPane.showMessageDialog(null, "密码错误!"); } } else { // 用户不存在 JOptionPane.showMessageDialog(null, "用户不存在!"); } // 关闭数据库连接 rs.close(); pstmt.close(); conn.close(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值