快捷搜索:

ResultSet详解

这篇文章并没有给出若何应用ResultSet的具编制子,只是从ResultSet的功能性长进行了具体的讲述。盼望这篇文章对大年夜家理解ResultSet能够有所赞助。下面便是这篇文章的详细内容。

结果集(ResultSet)是数据中查询结果返回的一种工具,可以说结果集是一个存储查询结果的工具,然则结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。

结果集读取数据的措檀越如果getXXX(),他的参数可以使整型表示第几列(是从1开始的),还可所以列名。返回的是对应的XXX类型的值。假如对应那列时空值,XXX是工具的话返回XXX型的空值,假如XXX是数字类型,如Float等则返回0,boolean返回false。应用getString()可以返回所有的列的值,不过返回的都是字符串类型的。XXX可以代表的类型有:基础的数据类型如整型(int),布尔型(Boolean),浮点型(Float,Double)等,比特型(byte),还包括一些特殊的类型,如:日期类型(java.sql.Date),光阴类型(java.sql.Time),光阴戳类型(java.sql.Timestamp),大年夜数型(BigDecimal和BigInteger等)等。还可以应用getArray(int colindex/String columnname),经由过程这个措施获适合前行中,colindex所在列的元素组成的工具的数组。应用getAsciiStream(int colindex/String colname)可以得到该列对应确当前行的ascii流。也便是说所有的getXXX措施都是对当前行进行操作。

结果集从其应用的特征上可以分为四类,这四类的结果集的所具备的特征都是和Statement语句的创建有关,由于结果集是经由过程Statement语句履行后孕育发生的,以是可以说,结果集具备何种特征,完全抉择于Statement,当然我是说下面要将的四个特征,在Statement创建时包括三种类型。首先是无参数类型的,他对应的便是下面要先容的基础的ResultSet对应的Statement。下面的代码顶用到的Connection并没有对其初始化,变量conn代表的便是Connection对应的工具。SqlStr代表的是相应的SQL语句。

1.最基础的ResultSet。

之以是说是最基础的ResultSet是由于,这个ResultSet他起到的感化便是完成了查询结果的存储功能,而且只能读去一次,不能够往返的滚动读取。这种结果集的创建要领如下:

Statement st = conn.CreateStatement

ResultSet rs = Statement.excuteQuery(sqlStr);

因为这种结果集不支持,滚动的读去功能以是,假如得到这样一个结果集,只能应用它里面的next()措施,逐个的读去数据。

2.可滚动的ResultSet类型。

这个类型支持前后滚动取得记载next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行absolute(int n),以及移动到相对当前行的第几行relative(int n),要实现这样的ResultSet在创建Statement时用如下的措施。

Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)

ResultSet rs = st.executeQuery(sqlStr)

此中两个参数的意义是:

resultSetType是设置ResultSet工具的类型可滚动,或者是弗成滚动。取值如下:

ResultSet.TYPE_FORWARD_ONLY只能向前滚动

ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个措施都能够实现随意率性的前后滚动,应用各类移动的ResultSet指针的措施。二者的差别在于前者对付改动不敏感,而后者对付改动敏感。

resultSetConcurency是设置ResultSet工具能够改动的,取值如下:

ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。

ResultSet.CONCUR_UPDATABLE 设置为可改动类型的参数。

以是假如只是想要可以滚动的类型的Result只要把Statement如下赋值就行了。

Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet rs = st.excuteQuery(sqlStr);

用这个Statement履行的查询语句获得的便是可滚动的ResultSet。

3.可更新的ResultSet

这样的ResultSet工具可以完成对数据库中表的改动,然则我知道ResultSet只是相称于数据库中表的视图,以是并时时所有的ResultSet只要设置了可更新就能够完成更新的,能够完成更新的ResultSet的SQL语句必须要具备如下的属性:

a、只引用了单个表。

b、不含有join或者group by子句。

c、那些列中要包孕主关键字。

具有上述前提的,可更新的ResultSet可以完成对数据的改动,可更新的结果集的创建措施是:

Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)

这样的Statement的履行结果获得的便是可更新的结果集。更新的措施是,把ResultSet的游标移动到你要更新的行,然后调用updateXXX(),这个措施XXX的含义和getXXX()是相同的。updateXXX()措施,有两个参数,第一个是要更新的列,可所以列名或者序号。第二个是要更新的数据,这个数据类型要和XXX相同。每完成对一行的update要调用updateRow()完成对数据库的写入,而且是在ResultSet的游标没有脱离该改动行之前,否则改动将不会被提交。

应用updateXXX措施还可以完成插入操作。然则首先要先容两个措施:

moveToInsertRow()是把ResultSet移动到插入行,这个插入行是表中特殊的一行,不必要指定详细那一行,只要调用这个措施系统会自动移动到那一行的。

moveToCurrentRow()这是把ResultSet移动到影象中的某个行,平日当前行。假如没有应用insert操作,这个措施没有什么效果,假如应用了insert操作,这个措施用于返回到insert操作之前的那一行,脱离插入行,当然也可以经由过程next(),previous()等措施脱离插入行。

要完成对数据库的插入,首先调用moveToInsertRow()移动到插入行,然后调用updateXXX的措施完成对,各列数据的更新,完成更新后和更新操作一样,要写到数据库,不过这里应用的是insertRow(),也要包管在该措施履行之前ResultSet没有脱离插入列,否则插入不被履行,并且对插入行的更新将损掉。

4.可维持的ResultSet

正常环境下假如应用Statement履行完一个查询,又去履行另一个查询时这时刻第一个查询的结果集就会被关闭,也便是说,所有的Statement的查询对应的结果集是一个,假如调用Connection的commit()措施也会关闭结果集。可维持性便是指当ResultSet的结果被提交时,是被关闭照样不被关闭。JDBC2.0和1.0供给的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我们可以设置ResultSet是否关闭。要完成这样的ResultSet的工具的创建,要应用的Statement的创建要具有三个参数,这个Statement的创建要领也便是,我所说的Statement的第三种创建要领。如下:

您可能还会对下面的文章感兴趣: