为什么jdbc中的resultset只能取一次去第二次就报错了


引用 6 楼  的回复:

好吧各位,应该写getInt(1)
但是我要问的是为什么第二次用会出错

啊,好古老的一个问题。。。

第二次出错的原因,是因为你创建Statement的时候,没有指定结果集(游标)模式!

createStatement(int resultSetType, int resultSetConcurrency)

resultSetType 就是结果集模式,取值范围是:
ResultSet.TYPE_FORWARD_ONLY: cursor may move only forward.
ResultSet.TYPE_SCROLL_INSENSITIVE: scrollable but generally not sensitive to changes to the data that underlies the ResultSet.
ResultSet.TYPE_SCROLL_SENSITIVE: scrollable and generally sensitive to changes to the data that underlies the ResultSet.

从性能考虑,缺省情况下,结果集模式为 TYPE_FORWARD_ONLY,这种情况下,只能向前读取;字段和行集都是如此。

不过这个也是老JDBC的问题了,话说楼主还在用JDBC2.0 ?

对我有用[0] 丢个板砖[0] 引用 | 举报| 管理

关注
ldh911
MiceRice
本版等级:

  

#13 得分:0回复于: 2012-08-09 13:36:11

对了,楼主可以做个实验,老版的JDBC,下面这么执行也会报错:
a = rs.getInt(2); // 先大下标
b = rs.getInt(1); // 再小下标

顺序正确则不会报错。

 

http://bbs.csdn.net/topics/390167395

时间: 2024-08-21 20:44:23

为什么jdbc中的resultset只能取一次去第二次就报错了的相关文章

JDBC中的ResultSet

ResultSet:结果集.存放数据库中的数据,可以将它想象成一张数据表,通过Statement对象中的executeQuery()方法获得 import com.mysql.jdbc.Statement;import java.sql.Connection;import java.sql.Driver;import java.sql.ResultSet;import java.util.Properties; /** * Created by I am master on 2016/9/29.

通过反射解析 jdbc中 的 ResultSet

private <T extends Object> T getResult(Class<?> className, String sql, String... params) { List<?> list = getResultList(className, sql, params); if (list != null && list.size() > 0) { return (T) list.get(0); } return null; } p

mapreduce中reduce中的迭代器只能调用一次!

亲测,只能调用一次,如果想想在一次reduce重复使用迭代器中的数据,得先取出来放在list中然后在从list中取出来!!多次读取reduce函数中迭代器的数据 public static class FindFriendReducer extends Reducer<Text, AllInfoBean, AllInfoBean, NullWritable> { protected void reduce(Text Keyin, Iterable<AllInfoBean> valu

JDBC中常用对象介绍

JDBC中的主要类(接口) 在JDBC中常用的类有: 1.DriverManager 2.Connection 3.Statement 4.ResultSet 1.DriverManager 其实我们今后只需要会用DriverManager的getConnection( )方法即可: 1. Class.forName("com.mysql.jdbc.Driver");//注册驱动 2. String url = "jdbc:mysq  l://localhost:3306/m

开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

1.  子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A.  过程 - 执行某些操作 a.  创建过程的语法: CREATE [OR REPLACE]  PROCEDURE  <procedure name> [(<parameter list>)]  IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <excep

JDBC中的事务-Transaction

事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少100元,银行卡余额增加100元,而不是支付宝的100元被扣除,而银行卡的100元却没收到.也就是说,要么100元从支付宝扣除的同时银行卡也会多出一百元,要么这次提现失败支付宝的100元还在,银行卡也没有收到钱.支付宝扣钱和银行卡收钱,这两件事要么都成功要么都失败. 事物的ACID特性: 满足ACID

使用JDBC中的出现的乱码和查询无结果问题

使用JDBC中的问题 连接的后出现查询结果是乱码. 1.可能是代码的编码与数据库的编码不同 ? 有可以将二者都设置为UTF-8 2.如果比较懒得话可以只设代码为UTF-8 mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用 添加的作用是:指定字符的编码.解码格式. ? 例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码.这时候如果添加了useUnicode=true&characterEncoding=UTF

多线程中,ResultSet为空,报错空指针

最近在数据库查询数据时,由于数据量太大,使用了多线程,通过线程池建了好几个线程,然后调用了一个封装好的jdbc查询语句. 结果在多线程中,ResultSet报错空指针. 仔细查阅后,才发现多个线程访问了同一个connection,事务混乱,导致了空指针. 解决方法: 使用数据库连接池,这样一个线程各自使用一个connection,就不会有冲突了. 原文地址:https://www.cnblogs.com/expiator/p/9168281.html

jdbc中对mysql数据库操作的简单封装--(仅做备忘记录)

本次使用jdbc中的mysql-connector-java-5.1.47-bin.jar的连接包,下载这个jar包放在javaee项目的WEB-INF/lib目录下,再把它作为外包jar包进入到libraries中,这样就可以使用mysql的jdbc接口了. 自己封装的代码中引入了两个自己字义的Exception:SqlSecureException.java package com.myproweb.exception; public class SqlSecureException ext