大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> JSP专区 -> JDBCTM 指南:入门5 - ResultSet

JDBCTM 指南:入门5 - ResultSet

时间: 2021-07-31 作者:daque

5 - resultset本概括是从《jdbctm database access from javatm: a tutorial and annotated reference 》这该书中摘引入的。javasoft 暂时正在筹备这该书。这是一本教程,同声也是 jdbc 的要害参考画册,它将动作 java 系列的构成部份在 1997 年春季由 addison-wesley 出书公司出书。 5.1 概括resultset 包括适合 sql 语句中前提的一切行,而且它经过一套 get 本领(那些 get 本领不妨考察暂时行中的各别列)供给了对那些行中数据的考察。resultset.next 本领用来挪动到 resultset 中的下一条龙,使下一条龙变成暂时行。截止集普遍是一个表,个中有查问所归来的列题目及相映的值。比方,即使查问为 select a, b, c from table1,则截止集将具备如次情势: a b c-------- --------- --------12345 cupertino ca83472 redmond wa83492 boston ma底下的代码段是实行 sql 语句的示例。该 sql 语句将归来行汇合,个中列 1 为 int,列 2 为 string,而列 3 则为字节数组: java.sql.statement stmt = conn.createstatement();resultset r = stmt.executequery("select a, b, c from table1");while (r.next()){// 打字与印刷暂时行的值。int i = r.getint("a");string s = r.getstring("b");float f = r.getfloat("c");system.out.println("row = " + i + " " + s + " " + f);}5.1.1 行和光标resultset 保护指向其暂时数据行的光标。每挪用一次 next 本领,光标向下挪动一条龙。首先它坐落第一条龙之前,所以第一次挪用 next 将把光标置于第一条龙上,使它变成暂时行。跟着历次挪用 next 引导光标向下挪动一条龙,依照从上至下的步骤获得 resultset 行。在 resultset 东西或其大伯 statement 东西封闭之前,光标从来维持灵验。在 sql 中,截止表的光标是驰名字的。即使数据库承诺定位革新或定位简略,则须要将光目标名字动作参数供给给革新或简略吩咐。可经过挪用本领 getcursorname 赢得光标名。提防:不是一切的 dbms 都扶助定位革新和简略。可运用 databasemetadata.supportspositioneddelete 和 supportspositionedupdate 本领来查看一定贯穿能否扶助那些操纵。当扶助那些操纵时,dbms/启动步调必需保证符合锁定选定行,以使定位革新不会引导革新特殊或其它并发题目。5.1.2 列本领 getxxx 供给了获得暂时行中某列值的道路。在每一条龙内,可按任何步骤获得列值。但为了保护可移植性,该当从左至右获得列值,而且一次性地读取列值。列名或列号可用来标识要居中获得数据的列。比方,即使 resultset 东西 rs 的第二列名为“title”,并将值保存为字符串,则下列任一代码将获得保存在该列中的值: string s = rs.getstring("title");string s = rs.getstring(2);提防列是从左至右编号的,而且从列 1 发端。同声,用作 getxxx 本领的输出的列名不辨别巨细写。供给运用列名这个选项的手段是为了让在查问中指定列名的用户可运用沟通的名字动作 getxxx 本领的参数。另一上面,即使 select 语句未指定列名(比方在“select * from table1”中或列是导出的时),则该当运用列号。那些情景下,用户将没辙真实领会列名。有些情景下,sql 查问归来的截止会合大概有多个列具备沟通的名字。即使列名用作 getxxx 本领的参数,则 getxxx 将归来第一个配合列名的值。所以,即使多个列具备沟通的名字,则须要运用列索引入保证检索了精确的列值。这时候,运用列号功效要略微高少许。对于 resultset 中列的消息,可经过挪用本领 resultset.getmetadata 获得。归来的 resultsetmetadata 东西将给出其 resultset 东西各列的编号、典型和属性。即使列名已知,但不知其索引,则可用本领 findcolumn 获得其列号。5.1.3 数据典型和变换对于 getxxx 本领,jdbc 启动步调试图将基础数据变换成指定 java 典型,而后归来符合的 java 值。比方,即使 getxxx 本领为 getstring,而基础数据库中数据典型为 varchar,则 jdbc 启动步调将把 varchar 变换成 java string。getstring 的归来值将为 java string 东西。下表表露了承诺用 getxxx 获得的 jdbc 典型及引荐用它获得的 jdbc 典型(通用 sql 典型)。小写的 x 表白承诺 getxxx 本领获得该数据典型;小写的 x 表白对该数据典型引荐运用 getxxx 本领。比方,除去 getbytes 和 getbinarystream 除外的任何 getxxx 本领都可用来获得 longvarchar 值,然而引荐按照归来的数据典型运用 getasciistream 或 getunicodestream 本领。本领 getobject 将任何数据典型归来为 java object。当基础数据典型是一定于数据库的笼统典型或当通用运用步调须要接收任何数据典型时,它利害常有效的。可运用 resultset.getxxx 本领获得罕见的 jdbc 数据典型。“x”表白该 getxxx 本领可正当地用来获得给定 jdbc 典型。“x”表白引荐运用该 getxxx 本领来获得给定 jdbc 典型。  tinyint smallint integer bignt real float double decimal numeric bit char varcharlongvarchar binary varbinary longvarbinary date time timestamp getbyte x x x x x x x x x x x x x             getshort x x x x x x x x x x x x x             getint x x x x x x x x x x x x x             getlong x x x x x x x x x x x x x             getfloat x x x x x x x x x x x x x             getdouble x x x x x x x x x x x x x             getbigdecimal x x x x x x x x x x x x x             getboolean x x x x x x x x x x x x x             getstring x x x x x x x x x x x x x x x x x x x getbytes                           x x x       getdate                     x x x       x   x gettime                     x x x         x x gettimestamp                     x x x       x   x getasciistream                     x x x x x x       getunicodestream                     x x x x x x       getbinarystream                           x x x       getobject x x x x x x x x x x x x x x x x x x x 5.1.4 对特殊大的行值运用流resultset 不妨获得大肆大的 longvarbinary 或 longvarchar 数据。本领 getbytes 和 getstring 将数据归来为大的块(最大为 statement.getmaxfieldsize 的归来值)。然而,以较小的恒定块获得特殊大的数据大概会更简单,而这可经过让 resultset 类归来 java.io.input 流来实行。从该流中可分块读取数据。提防:必需登时考察那些流,由于鄙人一次对 resultset 挪用 getxxx 时它们将机动封闭(这是因为基础实行对大块数据考察有控制)。 jdbc api 具备三个获得流的本领,辨别具备各别的归来值: getbinarystream 归来只供给数据库原字节而不举行任何变换的流。getasciistream 归来供给单字节 ascii 字符的流。getunicodestream 归来供给双字节 unicode 字符的流。提防:它各别于 java 流,后者归来无典型字节并可(比方)通用来 ascii 和 unicode 字符。下列代码演练了 getasciistream 的用法: java.sql.statement stmt = con.createstatement();resultset r = stmt.executequery("select x from table2");// 此刻以 4k 块巨细获得列 1 截止:byte buff = new byte[4096];while (r.next()) {java.io.inputstream fin = r.getasciistream(1);for (;;) {int size = fin.read(buff);if (size == -1) { // 达到流结束break;}// 将新弥补的缓冲区发送给 ascii 输入流:output.write(buff, 0, size);}}5.1.5 null 截止值要决定给定截止值能否是 jdbc null,必需先读取该列,而后运用 resultset.wasnull 本领查看该次读取能否归来 jdbc null。当运用 resultset.getxxx 本领读取 jdbc null 时,本领 wasnull 将归来下列值之一: java null 值:对于归来 java 东西的 getxxx 本领(比方 getstring、getbigdecimal、getbytes、getdate、gettime、gettimestamp、getasciistream、getunicodestream、getbinarystream、getobject 等)。零值:对于 getbyte、getshort、getint、getlong、getfloat 和 getdouble。false 值:对于 getboolean。5.1.6 可选截止集或多截止集常常运用 executequery(它归来单个 resultset)或 executeupdate(它可用来任何数据库窜改语句,并归来革新行数)可实行 sql 语句。但有些情景下,运用步调在实行语句之前不领会该语句能否归来截止集。其余,有些已保存进程大概归来几个各别的截止集和/或革新计数。为了符合那些情景,jdbc 供给了一种体制,承诺运用步调实行语句,而后处来由截止集和革新计数构成的大肆汇合。这种体制的道理是开始挪用一个实足通用的 execute 本领,而后挪用其余三个本领,getresultset、getupdatecount 和 getmoreresults。那些本领承诺运用步调一次一个地接洽语句截止,并决定给定截止是 resultset 仍旧革新计数。用户不用封闭 resultset;当爆发它的 statement 封闭、从新实行或用来从多截止序列中获得下一个截止时,该 resultset 将被 statement 机动封闭。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.