`
wind_bell
  • 浏览: 291969 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

JDBC基础(四)注:转

    博客分类:
  • JDBC
阅读更多
作为基础知识的最后部分,我们来说一说结果集的处理,当然是说对一般结果集的处理.
至于存储过程返回的多结果集,我们仍然放在高级应用中介绍.
    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.rar

    但理解和掌握JDBC基础知识仍然是每个Java开发者的必备技能,因为它有助于理解这些框架的工作原理,并在遇到问题时能进行底层排查。 通过《跟姐姐学JDBC》这份资料,你可以系统地学习JDBC的各个方面,结合实际案例...

    shopping-management-system_超市管理系统_

    商品信息的管理是超市运营的基础,确保了数据的准确性和实时性。 2. 库存控制:系统应具备库存监控功能,实时更新商品库存,当库存量低于预设阈值时,能发出预警,以便及时补充货品。同时,它还能记录每一次出入库...

    how2j离线免费版.rar

    8. **数据库操作**:涉及JDBC基础,事务管理,以及与MySQL、Oracle等常见数据库的交互。 9. **Maven或Gradle**:如何使用构建工具管理项目依赖。 10. **Web开发**:讲解Servlet、JSP、过滤器和监听器,以及SpringMVC...

    Java工资管理系统

    这个系统集成了基础的数据存储、检索、更新以及删除等操作,旨在提高人力资源部门的效率,同时提供了一个直观的用户界面,方便操作人员进行日常的工资管理。 在Java工资管理系统中,主要涉及以下几个核心知识点: ...

    基于SpringBoot开发的长途汽车售票系统源码+sql数据库+项目说明+设计报告.zip

    配置属性文件路径:src/main/resources/application.properties 注:只需配置和修改sql主机地址,数据库名,用户名,密码, 项目访问路径,这几个属性,项目即可正常运行访问。 # DataSource jdbc.driver=...

    Web原理及应用:微博—会员管理

    一般会使用关系型数据库如MySQL,通过JDBC或ORM框架(如Hibernate或MyBatis)来与数据库交互。在添加会员时,会执行SQL的INSERT语句。同样,删除会员会执行DELETE语句,而展示会员信息则会使用SELECT语句。 为了...

    was部署与配置手册

    - **启动命令**:`D:\IBM\WebSphere\AppServer\bin>startServer.bat server1` (注:server1 是默认服务器名,可根据实际情况调整) - **停止命令**:`D:\IBM\WebSphere\AppServer\bin>stopServer.bat server1` #####...

    基于Servlet JSP MySQL的用户注册模块V1.0

    在这个过程中,涉及到的关键技术包括Servlet、JSP和JDBC。 Servlet是Java编程语言中用于扩展服务器功能的接口,它处理来自客户端(如浏览器)的请求,并生成响应。在这个用户注册模块中,Servlet作为服务器端的控制...

    图书管理系统

    接着,配置数据库连接,通常会使用JDBC驱动程序,通过DSN(数据源名称)或连接字符串建立与SQL Server的连接。最后,启动Tomcat,用户就可以通过浏览器访问图书管理系统了。 总的来说,《图书管理系统》是IT行业中...

    基于ssm+bootstrap的简单员工管理系统 +源代码+文档说明

    注:使用前需要配置maven环境 使用中遇到问题可提交issue,+qq讨论 使用工具eclipse,在eclipse导入文件即可使用 通过运行项目里面的ssm_crud.sql来导入数据库结构 注意修改数据库信息:ssm-crud/src/main/...

    java版飞机大战源码-Rockira.github.io:Rockira.github.io

    注 : 没链接的是还没写 :hot_beverage: 各类知识点总结 下面的文章都有对应的原创精美PDF,在持续更新中,可以来找我催更~ Hibernate AJAX Redis ...... :hot_beverage:Java基础 计算机操作系统与Linux 计算机网络 7...

    PL/SQL 基础.doc

    PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 ... 注:a. 加上REVERSE关键字 表示递减,从结束边界到起始边界,递减步长为一; ...

    Eclipse连接MySQL数据库宣贯.pdf

    // (注:示例代码中这部分未完整给出) } catch (Exception e) { e.printStackTrace(); } finally { if (sm != null) { try { sm.close(); } catch (SQLException e) { e.printStackTrace(); } } if ...

    自己总结的Kettle使用方法和成果.doc

    Kettle 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转换,job 则完成整个工作流的控制。 三、Kettle 的安装和配置 首先,需要下载开源免费的 pdi-ce 软件压缩包,当前最新版本为...

    Spring+SpringMVC+MyBatis SSM

    本程序适合初学者学习,采用Spring+SpringMVC+...注:本程序绝对100%可以使用,仅用于学习交流,一切从事商业活动与本作者无关,保留一切解释权。 代码简单,易懂,欢迎共同学习交流QQ:596085859 本代码出持续升级。

    jsp资料,非常好的基础学习资料

    7. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL是一套标准标签库,包括核心标签、XML标签、JDBC标签、函数标签等,旨在减少scriptlet的使用,提高代码的可读性和可维护性。 8. **Servlet与JSP的关系*...

    jsp编程光盘,详细的源代码例程及注释,从初级到高级,具参考价值!

    JSP最终会被翻译成Servlet,它们都是基于Java的Web开发技术,但JSP更注重视图层,Servlet则更适合控制逻辑。 **五、JSP示例代码** 压缩包中的例程可能包括以下类型: 1. **Hello, World!**:基础的JSP页面展示,...

    基于SpringMVC+Spring+Hibernate+JQuery+Bootstrap框架的OA系统

    注:建库时,字符集编码为:utf8(utf8_general_ci) ---修改配置文件“jdbc.properties”,改成对应数据库的用户名和密码 ---“sysconfig.properties”系统配置文件;需要修改“root.dir”属性,设置为...

    基于SpringMvc+Spring+MyBatis的OA系统项目

    注:建库时,字符集编码为:utf8(utf8_general_ci) ---修改配置文件“jdbc.properties”,改成对应数据库的用户名和密码 ---“sysconfig.properties”系统配置文件;需要修改“root.dir”属性,设置为...

Global site tag (gtag.js) - Google Analytics