- 浏览: 384550 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
hylandtecliulei:
现在JSF在国外很火的,我们公司的开发平台就是基于JSF
JSF的各种框架实现(对目前JSF群雄一个了解)(转) -
bcabchappy:
在哪呢?压力挺大的,诶。
flex 三大数据传输格式 json,xml,object相互转换的api -
simple8888:
JSF现在还有吗?
JSF的各种框架实现(对目前JSF群雄一个了解)(转) -
游其是你:
请问channelset写在哪儿啊?最后写个小项目“hello ...
用as实现RemoteObject -
hans.org:
mark it
自定义组件中的元数据标签
ResultSet参数设置和更新
ResultSet中保存了 query查询语句执行的结果,因此被用来扫描(检索,定位)数据。不过,也可以用来导航数据和进行个别的更新。接下来我们来看下细节:
一、导航 ResultSet数据
只要数据库允许这些操作,JDBC提供了下面几个方法都可以用来导航ResultSet中数据。
ResultSet’s Methods for Navigating Rows
boolean next();
boolean previous();
boolean first();
boolean last();
void beforeFirst();
void afterLast();
boolean relative(int n);
boolean absolute(int n);
boolean next()游标位置后移一个,如果当前是最后一行了,那么返回false
boolean previous()游标位置前移一个,如果当前是第一行,则返回false
oolean first() 游标位置返回第一行,如果不存在(查询结果为空),那么返回false
boolean last()游标位置返回最后一行,如果不存在(查询结果为空),那么返回fals
void beforeFirst()返回到最开始,它的下一行是第一行数据。
void afterLast()返回到最后,它的上一行是最后一行数据
boolean relative(int n) 以当前位置为基准,跳n个位置,如果n为正那么往后移动n行,如果为负那往前移动n行。
boolean absolute(int n)为正,则以第一行为基准,跳到第n行,为负,则从最后一行往前跳n行.
二、ResultSet的三种类型参数
缺省情况下创建的ResultSet 是一种只能访问一次(one-time-through),只能向前访问(forward-only),只读的对象。您只能访问数据一次,如果再次需要该数据,必须重新查询数据库。
ResultSet.TYPE_SCROLL_SENSITIVE
双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。(其它人对记录的修改会反应到你打开的记录集 敏感)
ResultSet.TYPE_SCROLL_INSENSITIVE
双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。(其它人对记录的修改不会反应到你打开的记录集 不敏感)
TYPE_FORWORD_ONLY
只可向前滚动。缺省类型,不会受到其他用户对该数据库所作更改的影响。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。
.
三、ResultSet 和事务处理参数
ResultSet 一般会被关闭,在事务的commit 或者 rollback被执行后.但是有时候你要保留ResultSet继续被使用怎么办?看下面参数:
HOLD_CURSORS_OVER_COMMIT: ResultSet的数据仍然可以被存取在commit 或者 rollback之后.
CLOSE_CURSORS_AT_COMMIT: ResultSet的数据被抛弃在 commits 或者 rollbacks执行后.
四、 并发性参数
ResultSet 的数据可以被更新的,为了达到这个目的要做的一件事情就是和数据库保持连接,然后就是使用一些锁机制在更新期间保护数据。并发等级参数有下面两个:
CONCUR_READ_ONLY: 不允许更新
CONCUR_UPDATABLE: 允许并发同步更新数据
五、参数的设置方法:
java.sql.Connection 在使用createStatement(), prepareStatement(), 和 prepareCall() 方法的时候设置参数:
Statement createStatement(int resultSetType, int concurrencyLevel)
Statement createStatement(int resultSetType, int concurrencyLevel,
int resultSetHoldability)
PreparedStatement prepareStatement(String sql, int resultSetType,
int concurrencyLevel)
PreparedStatement prepareStatement(String sql, int resultSetType,
int concurrencyLevel, int resultSetHoldability)
CallableStatement prepareCall(String sql, int resultSetType, int concurrencyLevel)
CallableStatement prepareCall(String sql, int resultSetType,
int concurrencyLevel, int resultSetHoldability)
六、不使用游标更新数据
Listing 7-8: Updating a ResultSet without Using Cursors
// updating resultsets
import java.sql.*;
class SimpleExample
{
public static void main(String args[])
{
String url = "jdbc:odbc:mysource";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection myConnection =
DriverManager.getConnection(url, "javauser",
"hotjava");
Statement stmt = myConnection.createStatement(
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT phone FROM
employees WHERE location = ‘Paris’");
while (rs.next()) {
String phone = rs.getString(1);
if (!phone.equals("")) {
// add a telephone prefix
rs.updateString("phone", "+31 " +
phone);
rs.updateRow();
}
}
rs.close();
stmt.close();
myConnection.close();
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}
也可以删除更新数据。
It is also possible to delete rows and insert rows using the ResultSet interface. Deleting a row is performed with ResultSet.deleteRow(). The current position within the ResultSet will be set after the row just deleted. Inserting a row is performed with ResultSet.moveToInsertRow(), which actually creates a logical row in the result set. Using the updateXXX() methods on this row sets values for each column in that row. ResultSet.insertRow() is then used to physically send that row to the database.
七、使用游标更新数据
使用游标的条件:
有SELECT语句
有一个名字
有一个位置
根据游标的名字来更新和删除ResultSet中的数据
游标机制 Figure 7-1.见附件
Figure 7-1: The cursor mechanism.
怎么样使用游标
void ResultSet.setCursorName(String name);
String ResultSet.getCursorName();
boolean DatabaseMetaData.supportsPositionedDelete();
boolean DatabaseMetaData.supportsPositionedUpdate();
supportsPositionedDelete():如果支持位置的delete语句,那么返回true
supportsPositionedUpdate():如果支持位置的update语句,那么返回true.
例子:
Listing 7-9: A Positioned Delete
// cursors: positioned delete
import java.sql.*;
class SimpleExample
{
public static void main(String args[])
{
String url = "jdbc:odbc:mysource";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection myConnection =
DriverManager.getConnection(url, "javauser", "hotjava");
Statement firstStmt = myConnection.createStatement();
Statement secondStmt = myConnection.createStatement();
ResultSet rs = firstStmt.executeQuery(
"SELECT * FROM employees FOR UPDATE");
String cursor = rs.getCursorName();
// scan the resultset
while (rs.next())
{
String phone = rs.getString("phone");
// activate positioned delete
// for employees outside of Belgium and France
if (!phone.startsWith("+31") ||
!phone.startsWith("+32"))
{
secondStmt.executeUpdate(
"DELETE employees WHERE CURRENT OF " +
cursor);
}
}
rs.close();
firstStmt.close();
secondStmt.close();
myConnection.close();
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}
Listing 7-10: A Positioned Update
// cursors: positioned update
import java.sql.*;
class SimpleExample
{
public static void main(String args[])
{
String url = "jdbc:odbc:mysource";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection myConnection =
DriverManager.getConnection(url,
"javauser", "hotjava");
Statement firstStmt = myConnection.createStatement();
Statement secondStmt = myConnection.createStatement();
ResultSet rs = firstStmt.executeQuery("SELECT * FROM
employees FOR UPDATE");
String cursor = rs.getCursorName();
// scan the resultset
while (rs.next())
{
String phone = rs.getString("phone");
// activate positioned update
// to convert salary to EURO currency
if (phone.startsWith("+31"))
{
secondStmt.executeUpdate(
"UPDATE employees SET salary = salary /
6.666 WHERE CURRENT OF " + cursor);
}
else if (phone.startsWith("+32"))
{
secondStmt.executeUpdate(
"UPDATE employees SET salary = salary /
40.000 WHERE CURRENT OF " + cursor);
}
}
rs.close();
firstStmt.close();
secondStmt.close();
myConnection.close();
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}
发表评论
-
错误解释:The hierarchy of the type is inconsistent
2010-06-20 14:09 6511在eclipse中出现如题报错。原因是import 的类含有错 ... -
虚拟机的版本相关错误处理
2009-06-04 17:04 1184此类问题每次发生在我倒腾我的开发环境时,今天小记下。 1、寻 ... -
Java关键字final、static使用总结
2009-04-24 22:52 957一、final 根据程序上下文环境,Java关键字f ... -
EQUALS() 和 HASHCODE()
2009-04-22 09:30 979我们知道,equals()函数是用来做比较的。java中的比较 ... -
轻松掌握java泛型
2009-04-22 08:53 973本月的 诊断 Java 代码介绍泛型类型(gener ... -
Java静态工厂一问
2009-04-01 09:50 1136在Effective+Java+Second+Edition2 ... -
日期验证和格式化(2)
2009-02-26 16:21 770private static boolean dataStyl ... -
mod函数
2009-02-23 16:43 1273mod函数是一个求余函数,其格式为: mod(nExp1,n ... -
Java获取URL对应的资源
2008-12-29 17:04 1799Java获取URL对应的资源 认识IP、认识URL是进 ... -
独立于Java EE之外的JTA/XA事务管理工具
2008-10-17 10:52 1430Atomikos公司的 TransactionEs ... -
protected访问权限
2008-10-06 14:36 11641、protected的类、类属变量及方法,包内的任何类,及包 ... -
了解我们的工作,软件开发(转)
2008-08-04 11:44 8941.按规定时间给客户提供稳定、安全、高效的程序。2.程序的代码 ... -
java执行批更新
2008-07-04 13:53 1228Statement, PreparedStatement和 C ... -
JAVA中各种格式化
2008-07-03 14:14 1311一、保留小数位 1.(double) (Math.round( ... -
好书:大话设计模式
2008-06-19 09:46 1439绝对好书!刚工作几个月!设计模式老早就在学,可是一直似懂非懂! ... -
org.apache.commons.logging基础
2008-06-18 16:28 5089从应用观点,首先需要的就是装载一个引用LogFactory实例 ...
相关推荐
ResultSet的用法
ResultSet 转为listmap
java数据库连接ResultSet
ResultSet直接在JTable显示
这是一个用来教你如何使用ResultSet 获取数据对象的文档,非常使用
但它仍不支持逆向映射 (REF CURSOR->ResultSet),因此当前版本的数据库仍然不支持 IN 和 IN OUT 参数。 在本方法指南中,我们拥有两个 Java 存储过程。Java 存储过程 getEmployees() 将 SCOTT 模式中 EMP 表的所有列...
获得结果集的字段名称,ResultSet的属性要调用ResultSetMetaData的方法
JAVA 版本ResultSet 转换为JAVABEAN的工具类
jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程
poi根据ResultSet到处Excle源码,包含项目所需jar包,可以直接运行
resultset 变成 XML 格式输出
ResultSet转List
javaResultSet常用方法.pdf
ResultSet转化为json,json转化为List,轻松搞定
JDBC通信原理 JDBC驱动类型 JDBC构成 JDBC程序5步走 滚动的结果集 可更新的结果集 SQL数据类型对应的Java类型 事务及批量处理 行集、连接池、LDAP
ResultSet常用方法,指针滚动,讲解很详细哦!
次类对ResultSet进行封装,可以将其转化为List,Map,BO等
ResultSet转化为Model,将从数据库中取得数据进行转化,方便对数据进行操作。
p6spy.jar 可配置是否需要resultset, excludecategories=info,debug,result,batch,resultset
封装ResultSet结果集