首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 图形图象-> Maya教程
JSP学习——全面解析JDBC(5)-JSP教程,Jsp/Servlet
作者:网友供稿 点击:23
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
如何获得sql语句的执行结果?

  resultset包含符合sql语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。resultset.next方法用于移动到resultset中的下一行,使下一行成为当前行。

  下面的代码段是执行sql语句的示例。该sql语句将返回行集合,其中列1为int,列2为string,而列3则为字节数组:

java.sql.statementstmt=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);
}

  1. 行和光标

  resultset维护指向其当前数据行的光标。每调用一次next方法,光标向下移动一行。

  最初它位于第一行之前,因此第一次调用next将把光标置于第一行上,使它成为当前行。随着每次调用next导致光标向下移动一行,按照从上至下的次序获取resultset行。

  在resultset对象或其父辈statement对象关闭之前,光标一直保持有效。在sql中,结果表的光标是有名字的。如果数据库允许定位更新或定位删除,则需要将光标的名字作为参数提供给更新或删除命令。可通过调用方法getcursorname获得光标名。

  databasemetadata.supportspositioneddelete和supportspositionedupdate方法来检查特定连接是否支持这些操作。当dbms支持定位更新和删除操作时,dbms/驱动程序必须确保适当锁定选定行,以使定位更新不会导致更新异常或其它并发问题。

  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得到其列号。

  3. 数据类型和转换

  对于getxxx方法,jdbc驱动程序试图将基本数据转换成指定java类型,

  然后返回适合的java值。例如,如果getxxx方法为getstring,而基本数据库中数据类型为varchar,则jdbc驱动程序将把varchar转换成javastring。getstring的返回值将为javastring对象。

  4. 对非常大的行值使用流
  resultset可以获取任意大的longvarbinary或longvarchar数据。方法getbytes和getstring将数据返回为大的块(最大为statement.getmaxfieldsize的返回值)。但是,以较小的固定块获取非常大的数据可能会更方便,而这可通过让resultset类返回java.io.input流来完成。从该流中可分块读取数据。注意:必须立即访问这些流,因为在下一次对resultset调用getxxx时它们将自动关闭(这是由于基本实现对大块数据访问有限制)。

  jdbcapi具有三个获取流的方法,分别具有不同的返回值:

  ·getbinarystream:返回只提供数据库原字节而不进行任何转换的流。

  ·getasciistream返回提供单字节ascii字符的流。

  ·getunicodestream返回提供双字节unicode字符的流。

  注意:它不同于java流,后者返回无类型字节并可(例如)通用于ascii和unicode字符。下列代码演示了getasciistream的用法:

java.sql.statementstmt=con.createstatement();
resultset r=stmt.executequery("select x from table2");
//现在以4k块大小获取列1结果:
byte buff=newbyte[4096];
while(r.next()){
java.io.inputstream fin=r.getasciistream(1);
for(;;){
intsize=fin.read(buff);
if(size==-1){//到达流末尾
break;
}
//将新填充的缓冲区发送到ascii输出流:
output.write(buff,0,size);
}
}

  5. null结果值

  要确定给定结果值是否是jdbc null,必须先读取该列,然后使用resultset.wasnull
方法检查该次读取是否返回jdbc null。

  当使用resultset.getxxx方法读取jdbc null时,方法wasnull将返回下列值之一:

  (1)javanull值

  对于返回java对象的getxxx方法(例如getstring、getbigdecimal、getbytes、getdate、gettime、gettimestamp、getasciistream、getunicodestream、getbinarystream、getobject等)。

  (2)零值:对于getbyte、getshort、getint、getlong、getfloat和getdouble。

  (3)false值:对于getboolean。

  6. 可选结果集或多结果集

  通常使用executequery(它返回单个resultset)或executeupdate(它可用于任何数据库修改语句,并返回更新行数)可执行sql语句。但有些情况下,应用程序在执行语句之前不知道该语句是否返回结果集。此外,有些已存储过程可能返回几个不同的结果集和/或更新计数。

  为了适应这些情况,jdbc提供了一种机制,允许应用程序执行语句,然后处理由结果集和更新计数组成的任意集合。这种机制的原理是首先调用一个完全通用的execute方法,然后调用另外三个方法,getresultset、getupdatecount和getmoreresults。这些方法允许应用程序一次一个地研究语句结果,并确定给定结果是resultset还是更新计数。

  用户不必关闭resultset;当产生它的statement关闭、重新执行或用于从多结果序列中获取下一个结果时,该resultset将被statement自动关闭。



文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·C# 1.x 实现 "强类型元素唯一的 ArrayList"-.NET教程,C#语言
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·快速測試 Tomcat + Oracle 9i + JSP-JSP教程,Jsp/Servlet
·使用.NET读取XML文件-.NET教程,XML应用
·XML 实用工具类-JSP教程,Java与XML
·如何把ASP编写成DLL-ASP教程,ASP应用
·vb.net中不需要EXCEL导出成XSL-.NET教程,VB.Net语言
·Asp之Request对象(1)-ASP教程,ASP应用
·C#读硬盘序列号的原代码-.NET教程,C#语言
·取得的IP/用户名等信息-ASP教程,ASP应用
最新文章
·linux操作系统上摄像头的使用小技巧_linux教程
·c#动态生成树型结构的web程序设计_c#应用
·一个联盟该如何来吸引站长加盟_网赚技巧
·童之磊:中文在线的“二次创业”_站长访谈
·实体店铺如何与网店结合提高销售额的经验_站长心得
·20年之后,个人站长发展项目的一些奇思怪想_站长心得
·google adsense的菜鸟常识_google推广
·如何利用google增加你的网站访问量_google推广
·专业的seo,为什么不承诺排名_seo网站优化
·用专业代码给网站增加搜索引擎_站长心得
相关主题
  • JSP学习笔记--JSP标签库-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(8)附录-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(7)-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(6)-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(4)-JSP教程,Jsp/Servlet
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭