`
xiebh
  • 浏览: 614501 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

JDBC基础(四)转

阅读更多
转自:http://blog.csdn.net/axman/archive/2006/07/07/887823.aspx
   
   作为基础知识的最后部分,我们来说一说结果集的处理,当然是说对一般结果集的处理.
至于存储过程返回的多结果集,我们仍然放在高级应用中介绍.
    SQL语句如何执行的是查询操作,那就要返回一个ResultSet对象,要想把查询结果最后
明白地显示给用户,必须对ResultSet进行处理.ResultSet返回的是一个表中符合条件的记录,对ResultSet的处理要逐行处理,而对于每一行的列的处理,则可以按任意顺序(注意,这只是JDBC规
范的要求,有些JDBC实现时对于列的处理仍然要求用户按顺序处理,但这是极少数的).事实上,虽
然你可以在处理列的时候可以按任意顺序,但如果你按从左到右的顺序则可以得到较高的性能.

    这儿从底层来讲解一下ResultSet对象,在任何介绍JDBC的书上你是不会获得这样的知
识的,因为那是数据库厂商的事.ResultSet对象实际维护的是一个二维指针,第一维是指向当前
行,最初它指向的是结果集的第一行之前,所以如果要访问第一行,就要先next(),以后每一行都
要先next()才能访问,然后第二维的指针指向列,只要当你去rs.getXXX(列)时,才通过
Connection再去数据库把真实的数据取出来,否则没有什么机器能真的把要取的数据都放在内
存中.
    所以,千万要记住,如果Connection已经关闭,那是不可能再从ResultSet中取到数据的.
有很多人问我,我可不可以取到一个ResultSet把它写到Session中然后关闭Connection,这样就
不要每次都连结了.我只能告诉你,你的想法非常好,但,是错误的!当然在javax.sql包中JDBC高
级应用中有CacheRow和WebCacheRow可以把结果集缓存下来,但那和我们自己开一个数据结构把
ResultSet的行集中所有值一次取出来保存起来没有什么两样.
    访问行中的列,可以按字段名或索引来访问.下面是一个简单的检索结果的程序:

   
ResultSet rs = stmt.executeQuery("select a1,a2,a3 from table");
    while(rs.next()){
        int i = rs.getInt(1);
        String a = rs.getString("a2");
        ..............
    }


    对于用来显示的结果集,用while来进行next()是最普通的,如果next()返回false,则
说明已经没有可用的行了.但有时我们可能连一行都没有,而如果有记录又不知道是多少行,这时
如果要对有记录和没有记录进行不同的处理,应该用以下流程进行判断:

 
  if(rs.next()){
        //因为已经先next()了,所经对记录应该用do{}while();来处理
        do{
            int i = rs.getInt(1);
            String a = rs.getString("a2");
        }while(rs.next());
    }
    esle{
        System.out.println("没有取得符合条件的记录!");
    }


    类型转换:
    ResultSet的getXXX方法将努力把结果集中的SQL数据类型转换为JAVA的数据类型,事实
大多数类型是可以转换的,但仍然有不少糊弄是不能转换的,如你不能将一个SQL的float转换成
JAVA的DATE,你无法将 VARCHAR "我们"转换成JAVA的Int.

    较大的值:
    对于大于Statement中getMaxFieldSize返回值的值,用普通的getBytes()或getString()
是不能读取的,好在JAVA提供了读取输入浪的方法,对于大对象,我们可以通过rs.getXXXStream()
来得到一个InputStream,XXX的类型包括Ascii,Binay,Unicode.根据你存储的字段类型来使用不
同的流类型,一般来说,二进制文件用getBinayStream(),文本文件用getAsciiStyream(),对于
Unicode字符的文本文件用getUnicodeStream(),相对应的数据库字段类型应该为:Blob,Clob和
Nlob.

    获取结果集的信息:
    大多数情况下编程人员对数据库结构是了解的,可以知道结果集中各列的情况,但有时并
不知道结果集中有哪些列,是什么类型.这时可以通过getMetaData()来获取结果集的情况:

  
 ResulSetMetaData rsmd = rs.getMetaData();
    rsmd.getColumnCount()返回列的个数.
    getColumnLabel(int)返回该int所对应的列的显示标题
    getColumnName(int)返回该int所对应的列的在数据库中的名称.
    getColumnType(int)返回该int所对应的列的在数据库中的数据类型.
    getColumnTypeName(int)返回该int所对应的列的数据类型在数据源中的名称.
    isReadOnly(int)返回该int所对应的列是否只读.
    isNullable(int)返回该int所对应的列是否可以为空



分享到:
评论

相关推荐

    JDBC 基础知识课件.ppt

    根据实现方式,JDBC驱动程序分为四种类型: - **JDBC-ODBC桥驱动**:通过ODBC(Open Database Connectivity)接口连接到数据库,适用于已有ODBC驱动程序的情况。 - **本地API部分Java驱动**:部分代码是用Java实现...

    jdbc基础知识总结

    ### JDBC基础知识总结 #### 一、概述 JDBC(Java Database Connectivity)是一种标准的Java API,用于连接并操作各种类型的数据库。它从物理结构上说就是一套Java语言访问数据库的接口集合,本质上则是调用者...

    JDBC基础教程之ResultSet对象.doc )

    ### JDBC基础教程之ResultSet对象详解 #### 一、ResultSet对象概览 `ResultSet`对象是Java Database Connectivity (JDBC) API中的一个核心组件,用于处理SQL查询结果。它充当了一个临时的数据存储,其中包含了所有...

    JSP JDBC 学习笔记(基础)

    ### JDBC基础 1. **JDBC简介**:JDBC是Java API,用于与各种数据库进行连接,执行SQL语句并处理结果。它提供了一套统一的接口,使得开发者无需关心底层数据库的细节。 2. **JDBC驱动**:根据不同的数据库系统,...

    jdbc学习手册 jdbc

    #### 四、JDBC编程步骤 JDBC编程的基本步骤包括注册驱动、建立连接、执行SQL语句、处理结果集、关闭资源等。 1. **注册驱动** - **方式一**:使用`Class.forName()`显式加载驱动程序。 - **方式二**:实例化驱动...

    JDBC 开发指南 JDBC 开发指南 JDBC 开发指南

    本文将基于“JDBC 开发指南”提供的内容,深入探讨 JDBC 的基础知识及其在实际应用中的作用。 #### 二、JDBC NetServer 概览 ##### 2.1 概述 JDBC NetServer 是一款用于实现 Java 应用程序与远程数据库之间通信的...

    jdbc资料jdbc资料jdbc资料pdf

    - `java.sql`包含基础的JDBC类和接口,如`Connection`, `Statement`, `ResultSet`等。 - `javax.sql`包含高级功能,例如`DataSource`等。 - **`DriverManager`类**: - **作用**:用于创建与数据库的连接。 - *...

    jdbc实现与线程池

    一、jdbc 基础 jdbc 是 Java 中访问数据库的标准 API,提供了统一的接口来访问不同的数据库管理系统。jdbc 的主要组件包括: * DriverManager:负责管理数据库连接的驱动程序。 * Connection:表示与数据库的连接...

    jdbc学习基础笔记

    ### JDBC学习基础笔记详解 #### 一、JDBC与ODBC概述 JDBC(Java Database Connectivity)是Java中用于连接数据库的标准接口,它允许Java应用程序与各种类型的数据库进行交互,而无需关心底层数据库的具体实现。...

    JDBC资料文档第一部分

    1. **java.sql**:这是JDBC的基础包,包含了用于基本数据库编程的服务,例如创建连接、执行语句、准备语句和运行批处理查询等。此外,还有一些高级处理,如批处理更新、事务隔离和可滚动结果集等。 2. **javax.sql**...

    JDBC与Java数据库编程

    #### 第二章:JDBC基础应用 **2.1 创建JDBC应用程序的步骤** - **导入JDBC类或包括JDBC类的包**:例如`import java.sql.*;` - **加载JDBC驱动程序**:使用`Class.forName()`方法加载特定数据库的JDBC驱动。 - **...

    JDBC编程 J275练习题、Java基础知识

    **一、JDBC基础** 1. **JDBC驱动类型**:JDBC驱动主要有四种类型: JDBC-ODBC桥接驱动、本地API驱动(纯Java)、网络协议驱动和JDBC-Net桥接驱动。它们各自有不同的工作原理和适用场景。 2. **JDBC连接步骤**:...

    JDBC基础知识1_保存大文本_分页_批处理

    标题“JDBC基础知识1_保存大文本_分页_批处理”揭示了本文将要讨论的是Java数据库连接(Java Database Connectivity, JDBC)的基础知识,主要包括如何在数据库中处理大文本数据、实现分页查询以及利用批处理提高...

    一份详尽的jdbc教材

    3. **易用性**:相比C语言为基础的ODBC,JDBC更易于理解和使用,尤其是在面向对象编程方面。 #### 五、JDBC的API接口 JDBC主要包括两个层面的接口: 1. **JDBC API**:面向开发者的API,包括`java.sql.Connection`...

    JDBC (pdf)

    ### JDBC (Java DataBase Connectivity) #### 1. 概述 JDBC (Java DataBase Connectivity) 是一个用于连接数据库的标准 Java API,...无论是初学者还是高级用户,掌握 JDBC 的基础知识都是构建高效数据库应用的关键。

    jdbc数据库接连JAR

    JDBC驱动通常分为四种类型:Type 1、Type 2、Type 3和Type 4。 3. **标题中的JDBC数据库连接JAR**: 提及的JDBC数据库连接JAR文件,如`msbase.jar`, `mssqlserver.jar`, `msutil.jar`,是针对Microsoft SQL Server...

    JDBC笔记.pdf

    事务的ACID属性指的是原子性、一致性、隔离性和持久性,这四个特性是事务处理的基础。在MySQL中,可以使用START TRANSACTION语句来开启一个事务,然后通过COMMIT语句提交事务,或者使用ROLLBACK语句来回滚事务。此外...

    JDBC教程文档

    #### 三、JDBC基础 JDBC(Java Database Connectivity)是一个由Sun Microsystems开发的标准API,用于Java应用程序与各种数据库通信。它是Java访问数据库的基础,也是其他数据访问技术如JDO和Hibernate的基础。 - *...

    java教材19-JDBC基础(IT job就业培训).doc

    4. **JDBC驱动程序**:有四种主要类型的驱动程序: - **JDBC-ODBC桥驱动**:适用于初学者,通过ODBC数据源连接到数据库,只适用于Windows平台。 - **本地API部分Java驱动**(Type 2):将JDBC调用转换为数据库的...

Global site tag (gtag.js) - Google Analytics