Java 数据库编程 ResultSet 的 使用方法

 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。 

结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。

如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false。

使用getString()可以返回所有的列的值,不过返回的都是字符串类型的。

XXX可以代表的类型有:

基本的数据类型如        整型(int),布尔型(Boolean),浮点型(Float,Double)等,比特型(byte),

还包括一些特殊的类型,如:     日期类型(java.sql.Date),时间类型(java.sql.Time),时间戳类型 (java.sql.Timestamp),

                大数型(BigDecimal和BigInteger等)等。

还可以使用getArray(int colindex/String columnname),通过这个方法获得当前行中,colindex所在列的元素组成的对象的数组。

使用getAsciiStream( int colindex/String colname)可以获得该列对应的当前行的ascii流。也就是说所有的getXXX方法都是对当前行进行操作。 

    结果集从其使用的特点上可以分为四类,这四类的结果集的所具备的特点都是和Statement语句的创建有关,因为结果集是通过Statement语句执行后产生的,所以可以说,结果集具备何种特点,完全决定于Statement,当然我是说下面要将的四个特点,在Statement创建时包括三种类型。首先是无参数类型的,他对应的就是下面要介绍的基本的ResultSet对应的Statement。下面的代码中用到的Connection并没有对其初始化,变量conn代表的就是Connection对应的对象。SqlStr代表的是响应的SQL语句。 

1、    最基本的ResultSet。 
之所以说是最基本的ResultSet是因为,这个ResultSet他起到的作用就是完成了查询结果的存储功能,而且只能读去一次,不能够来回的滚动读取。这种结果集的创建方式如下: 

Statement st = conn.CreateStatement 
ResultSet rs = Statement.excuteQuery(sqlStr); 

由于这种结果集不支持,滚动的读去功能所以,如果获得这样一个结果集,只能使用它里面的next()方法,逐个的读去数据。 

2、    可滚动的ResultSet类型。 
这个类型支持前后滚动取得纪录next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行 absolute(int n),以及移动到相对当前行的第几行relative(int n),要实现这样的ResultSet在创建Statement时用如下的方法。 

Statement st = conn. createStatement (int resultSetType, int resultSetConcurrency) 
ResultSet rs = st.executeQuery(sqlStr) 

其中两个参数的意义是: 
resultSetType 是设置 ResultSet 对象的类型可滚动,或者是不可滚动。取值如下: 
       ResultSet.TYPE_FORWARD_ONLY 只能向前滚动 
       ResultSet.TYPE_SCROLL_INSENSITIVE 和 Result.TYPE_SCROLL_SENSITIVE 这两个 方法都能够实现任意的前后滚动,使用各种移动的 ResultSet 指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。 
resultSetConcurency 是设置 ResultSet 对象能够修改的,取值如下: 
       ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。 
       ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。 
所以如果只是想要可以滚动的类型的 Result 只要把 Statement 如下赋值就行了。 

Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE, 
                          ResultSet.CONCUR_READ_ONLY); 
ResultSet rs = st.excuteQuery(sqlStr) ; 

用这个 Statement 执行的查询语句得到的就是可滚动的 ResultSet 。 

3、    可更新的ResultSet 
这样的ResultSet对象可以完成对数据库中表的修改,但是我知道ResultSet只是相当于数据库中表的视图,所以并不时所有的ResultSet只要设置了可更新就能够完成更新的,能够完成更新的ResultSet的SQL语句必须要具备如下的属性: 
    a 、只引用了单个表。 
    b 、不含有join或者group by子句。 
    c 、那些列中要包含主关键字。 
    具有上述条件的,可更新的ResultSet可以完成对数据的修改,可更新的结果集的创建方法是: 

Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE) 

4、    可保持的ResultSet 
正常情况下如果使用Statement执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的Statement的查询对应的结果集是一个,如果调用Connection的commit()方法也会关闭结果集。可保持性就是指当ResultSet的结果被提交时,是被关闭还是不被关闭。JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我们可以设置ResultSet是否关闭。要完成这样的ResultSet的对象的创建,要使用的Statement的创建要具有三个参数,这个Statement的创建方式也就是,我所说的 Statement的第三种创建方式。 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zeuskaaba/archive/2009/09/04/4517894.aspx 

当使用ResultSet的时候,当查询出来的数据集记录很多,有一千万条的时候,那rs所指的对象是否会占用很多内存,如果记录过多,那程序会不会把系统的内存用光呢 

不会的,ResultSet表面看起来是一个记录集,其实这个对象中只是记录了结果集的相关信息,具体的记录并没有存放在对象中,具体的记录内容知道你通过next方法提取的时候,再通过相关的getXXXXX方法提取字段内容的时候才能从数据库中得到,这些并不会占用内存,具体消耗内存是由于你将记录集中的数据提取出来加入到你自己的集合中的时候才会发生,如果你没有使用集合记录所有的记录就不会发生消耗内存厉害的情况。

时间: 2024-08-04 13:58:59

Java 数据库编程 ResultSet 的 使用方法的相关文章

Java数据库编程中查询结果的表格式输出

编程|数据|数据库 [内容摘要]本文较为详细地介绍了在Java数据库编程中,利用表格输出查询结果的方法:并对所涉及的类给以了简要说明.[关键字]类.对象.接口[作者简介]男,26岁,陕西财经学院研究生,师从陈逢吉教授,从事金融信息系统方面的研究. 利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果.由于SUN公司提供的JDK1.x开发工具包不是可视化的集成开发环境(IDE),不能象Delphi.VB那样方便地把查询结果在DBGrid等表格中显示出来.因此,只能靠自己编写代码来实现

请问JAVA ODBC编程ResultSet多线程的问题

问题描述 请问JAVA ODBC编程ResultSet多线程的问题 使用ResultSet取得SQL查询的结果,并对每个next进行处理,写入文件中: File c=new File("E:test.txt"); FileWriter x = new FileWriter(c); Statement stat = conn.createStatement(); ResultSet resultSet = stat.executeQuery(sql); String result = &

关于java问题-java数据库编程odbc驱动连接

问题描述 java数据库编程odbc驱动连接 我做了一个java数据库程序,有一个登录界面,我将数据库用户名和密码作为登录密码,但登录时输入也能连接成功,代码去下connection con=DriverManager.getConnection("jdbc:odbc:JAVASQL",local,key);求大神指点 解决方案 http://blog.csdn.net/paopaomm/article/details/6272405 解决方案二: java通过odbc连接各种数据库J

Java数据库编程中的几个常用技巧

编程|技巧|数据|数据库 1.java数据库操作基本流程 2.几个常用的重要技巧: 可滚动.更新的记录集 批量更新 事务处理 java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 1.取得数据库连接 1)用DriverManager取数据库连接 例子: String className,url,uid,pwd;className = "oracle.jdbc.driver.OracleDriver";url = "jdbc:or

java 数据库编程 学习笔记 不断更新

最近开始学习java,感觉java的数据库编程需要发个随笔记录一下,话不多说 切入正题.   一.数据库访问技术的简介                      应用程序  →  执行SQL语句 →数据库 → 检索数据结果 → 应用程序     ( ODBC         JDBC(两个常用的API))    java主要使用的 JDBC驱动程序进行数据库的编程 Java 应用程序 <------> JDBC   <------>  数据库     二.JDBC 的体系结构  

JDBC与JAVA数据库编程

一.JDBC的概念 1. JDBC (Java DataBase Connectivity) Java数据库连接 a) 主要提供java数据库应用程序的API支持   2. JDBC的主要功能 a) 创建和管理与数据源的连接 b) 发送SQL数据命令到数据源 c) 提取并处理由数据源返回的结果集   3. JDBC可分为两层 a) 驱动程序管理接口 b) JDBC API   4. Java.sql包中定义的常用基本的JDBC API a) 类DriverManager:管理一组JDBC驱动程序

Java数据库编程中的技巧_JSP编程

1.java数据库操作基本流程 2.几个常用的重要技巧: 可滚动.更新的记录集 批量更新 事务处理 java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 1.取得数据库连接 1)用DriverManager取数据库连接 例子: String className,url,uid,pwd; className = "oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@

Java数据库编程中的技巧

1.java数据库操作基本流程 2.几个常用的重要技巧: 可滚动.更新的记录集 批量更新 事务处理 java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 1.取得数据库连接 1)用DriverManager取数据库连接 例子: String className,url,uid,pwd; className = "oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@

Java数据库编程常用技巧

Java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 1.取得数据库连接 1)用DriverManager取数据库连接,例子: String className,url,uid,pwd; className = "oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; uid = "system"; p