仓酷云

标题: JAVA教程之JSP进修――周全剖析JDBC(5) [打印本页]

作者: 若相依    时间: 2015-1-18 11:32
标题: JAVA教程之JSP进修――周全剖析JDBC(5)
前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。js怎样取得SQL语句的实行了局?

  ResultSet包括切合SQL语句中前提的一切行,而且它经由过程一套get办法(这些get办法能够会见以后行中的分歧列)供应了对这些行中数据的会见。ResultSet.next办法用于挪动到ResultSet中的下一行,使下一行成为以后行。

  上面的代码段是实行SQL语句的示例。该SQL语句将前往行汇合,个中列1为int,列2为String,而列3则为字节数组:

Java.sql.Statementstmt=conn.createStatement();
ResultSetr=stmt.executeQuery("SELECTa,b,cFROMTable1");
while(r.next()){
//打印以后行的值。
Inti=r.getInt("a");
Strings=r.getString("b");
Floatf=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",并将值存储为字符串,则以下任一代码将猎取存储在该列中的值:

  Strings=rs.getString("title");
  Strings=rs.getString(2);

  注重列是从左至右编号的,而且从列1入手下手。同时,用作getXXX办法的输出的列名不辨别巨细写。

  供应利用列名这个选项的目标是为了让在查询中指定列名的用户可以使用不异的名字作为getXXX办法的参数。另外一方面,假如select语句未指定列名(比方在"select*fromtable1"中或列是导出的时),则应当利用列号。这些情形下,用户将没法切实晓得列名。

  有些情形下,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();
ResultSetr=stmt.executeQuery("SELECTxFROMTable2");
//如今以4K块巨细猎取列1了局:
bytebuff=newbyte[4096];
while(r.next()){
Java.io.InputStreamfin=r.getAsciiStream(1);
for(;;){
intsize=fin.read(buff);
if(size==-1){//抵达流开端
break;
}
//将新添补的缓冲区发送到ASCII输入流:
output.write(buff,0,size);
}
}

  5.NULL了局值

  要断定给定了局值是不是是JDBCNULL,必需先读取该列,然后利用ResultSet.wasNull
办法反省该次读取是不是前往JDBCNULL。

  当利用ResultSet.getXXX办法读取JDBCNULL时,办法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主动封闭。



在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。
作者: 因胸联盟    时间: 2015-1-21 09:52
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 只想知道    时间: 2015-1-22 06:58
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: 再见西城    时间: 2015-1-27 07:21
是一种使网页(Web Page)产生生动活泼画面的语言
作者: 灵魂腐蚀    时间: 2015-2-5 01:52
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: 山那边是海    时间: 2015-2-9 20:30
是一种突破用户端机器环境和CPU
作者: 兰色精灵    时间: 2015-2-27 21:01
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 金色的骷髅    时间: 2015-2-28 15:05
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 变相怪杰    时间: 2015-3-1 19:22
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 愤怒的大鸟    时间: 2015-3-10 22:28
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 飘灵儿    时间: 2015-3-11 06:22
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者: 再现理想    时间: 2015-3-16 20:12
是一种将安全性(Security)列为第一优先考虑的语言
作者: 海妖    时间: 2015-3-19 06:09
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者: 老尸    时间: 2015-3-25 20:53
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 深爱那片海    时间: 2015-4-15 05:12
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 活着的死人    时间: 2015-4-17 01:55
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者: 蒙在股里    时间: 2015-4-25 09:02
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者: admin    时间: 2015-4-27 07:59
是一种将安全性(Security)列为第一优先考虑的语言
作者: 分手快乐    时间: 2015-6-6 15:51
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 谁可相欹    时间: 2015-6-12 02:20
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2