JavaEE JDBC ResultSet内外移动

ResultSet内外移动

@author ixenos

内外移动指位置光标的移动



内移动就是一个ResultSet得到后的那个光标!

外移动就是多个ResultSet的迭代

内移动



一般的数据库都不允许单个查询提交多个SELECT语句,

1.execute执行SQL语句后,返回一个结果集ResultSet,

2.其中有个光标next在第一个元组之前(想象一下),调用hasNext就会判断光标下一个元组存不存在

3.rs.next定位行(元组triple),rs.getXXX定位列(字段field)

外移动



在执行存储过程中、或某些允许单个查询提交多个SELECT语句的操作中,可能会返回多个结果集

1.使用execute方法执行SQL语句,将获取第一个结果集或更新计数,

2.重复调用getMoreResults方法,将移动ResultSets的光标到下一个结果集,

3.当不存在更多的结果集或更新计数时,完成操作

4.stat.getResultSet定位当前结果集,stat.getUpdateStatement更新计数,stat.getMoreResults定位下一个结果集

boolean isResult = stat.execute(sql);

Boolean done = false;

while(!done){

      if(isResult){

           ResultSet result = stat.getResultSet();

           。。。

      }else{

           int updateCount = stat.getUpdateCount();

           //isResult是false,但count!=-1,说明存在SQL操作但不返回结果集

           if(updateCount >= 0){

                 。。。

           }else{

                 //count是-1时,说明getMoreResults没有结果集了,也没有别的SQL操作,此时退出

                 Done = true;

           }

      }

      if(!done)  isResult = stat.getMoreResults();

}

  

时间: 2024-10-27 01:14:32

JavaEE JDBC ResultSet内外移动的相关文章

java jdbc ResultSet结果通过java反射赋值给java对象

在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. 因为很多情况下数据不止一条,所以返回的是对象类的一个集合. 需要注意的地方:在这里,数据库字段命名格式为:user_name 下划线格式,而java类型的命名格式为驼峰命名格式. 具体代码如下: package com.xc.sap.util; import java.sql.Connection;

[javaEE] JDBC快速入门

JDBC:Java Data Base Connectivity java数据库连接 1.组成JDBC的两个包:主要是接口 java.sql javax.sql 2.相应JDBC的数据库实现 在tomcat的目录下面添加mysql-connector-java-5.0.8-bin.jar这个数据库驱动包 package com.tsh.web; import java.io.IOException; import java.sql.Connection; import java.sql.Driv

JavaEE JDBC 核心API

JDBC接口核心的API @author ixenos java.sql.*   和  javax.sql.* |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, properties):  连接数据库的方法. url: 连接数据库的URL URL语法: jdbc协议:数据库子协议://主机:端口/数据库 user: 数据库的用户名 password: 数据库用户密码 |- DriverManager类: 驱动管理器类,用于

javaEE jdbc编程步骤

1.载入数据库驱动(jar文件) //须要下载一个数据库的jar包,并导入对应的JDBC项目中,创建路径! Class.forName("com.mysql.jdbc.Driver"); 2.获得数据库连接 DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD"); //返回Connection----

JDBC ResultSet 可更新的结果集

接着上一篇:可滚动的结果集: 1)com.microsoft.sqlserver.jdbc.SQLServerException: 结果集不可更新. 当concurrency设置为:ResultSet.CONCUR_READ_ONLY(默认)时,结果集不能更新数据,否则会报 SQLServerException 示例: statement = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_R

JDBC ResultSet 可滚动的结果集

可滚动的结果集 1)com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作. 当type设置为:ResultSet.TYPE_FORWARD_ONLY(默认)时,游标是不能任意移动的,只能逐步向前,否则会报 SQLServerException 示例: statement = con.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_XXX)

将JDBC ResultSet结果集变成List

private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); public String queryAll() { Connection conn = null; Statement sta = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); con

JavaEE JDBC 事务

JDBC 事务 @author ixenos 事务 1.概念:我们将一组语句构建成一个事务(trans action),当所有语句顺利执行之后,事务可以被提交(commit):否则,如果其中某个语句遇到错误,那么事务将被回滚,就好像没有任何语句被执行一样 2.需求背景:将多个语句组合成事务的主要原因是为了确保数据库完整性(database integrity) 3.默认情况下,数据库连接处于自动提交模式(autocommit mode),每个SQL语句一旦被执行便被提交给数据库,一旦命令被提交就

将JDBC ResultSet结果集转成List

背景: 之前想要将数据库中的记录转化成List,需要对ResultSet中的数据根据不用的数据类型,用get方法进行获取: 现在通过使用ResultSet中的元数据信息,自动根据数据类型进行相关数据的取出: 避免了每次判断类型这样的繁琐操作: 实现: private static List<List<Object>> list = new ArrayList<List<Object>>(); public static String queryAll() {