- 浏览: 391847 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
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 6575在eclipse中出现如题报错。原因是import 的类含有错 ... -
虚拟机的版本相关错误处理
2009-06-04 17:04 1212此类问题每次发生在我倒腾我的开发环境时,今天小记下。 1、寻 ... -
Java关键字final、static使用总结
2009-04-24 22:52 982一、final 根据程序上下文环境,Java关键字f ... -
EQUALS() 和 HASHCODE()
2009-04-22 09:30 1013我们知道,equals()函数是用来做比较的。java中的比较 ... -
轻松掌握java泛型
2009-04-22 08:53 1017本月的 诊断 Java 代码介绍泛型类型(gener ... -
Java静态工厂一问
2009-04-01 09:50 1177在Effective+Java+Second+Edition2 ... -
日期验证和格式化(2)
2009-02-26 16:21 801private static boolean dataStyl ... -
mod函数
2009-02-23 16:43 1308mod函数是一个求余函数,其格式为: mod(nExp1,n ... -
Java获取URL对应的资源
2008-12-29 17:04 1836Java获取URL对应的资源 认识IP、认识URL是进 ... -
独立于Java EE之外的JTA/XA事务管理工具
2008-10-17 10:52 1461Atomikos公司的 TransactionEs ... -
protected访问权限
2008-10-06 14:36 12041、protected的类、类属变量及方法,包内的任何类,及包 ... -
了解我们的工作,软件开发(转)
2008-08-04 11:44 9231.按规定时间给客户提供稳定、安全、高效的程序。2.程序的代码 ... -
java执行批更新
2008-07-04 13:53 1275Statement, PreparedStatement和 C ... -
JAVA中各种格式化
2008-07-03 14:14 1347一、保留小数位 1.(double) (Math.round( ... -
好书:大话设计模式
2008-06-19 09:46 1471绝对好书!刚工作几个月!设计模式老早就在学,可是一直似懂非懂! ... -
org.apache.commons.logging基础
2008-06-18 16:28 5126从应用观点,首先需要的就是装载一个引用LogFactory实例 ...
相关推荐
8. 游标属性:可以通过设置Statement的游标属性(如CONCUR_READ_ONLY和CONCUR_UPDATABLE)来控制ResultSet是否可滚动和更新。默认情况下,ResultSet是只读且不可滚动的。 9. 非滚动与滚动ResultSet:非滚动...
为了方便数据处理和使用,我们需要将 ResultSet 转为 List,以便于后续的数据处理和展示。 下面是将 ResultSet 转为 List<Map> 的实现代码: ```java public static List,Object>> ResultSetToList(ResultSet rs) ...
6. **设置JTable**:最后,将创建的`TableModel`设置给`JTable`的`setModel()`方法,这样`JTable`就会显示来自`ResultSet`的数据。 在提供的文件列表中,`vTable.java`和`Frame1.java`可能是实现这个功能的源代码。...
另外,ResultSet还提供了获取列信息的方法,例如 getMetaData,可以用来获取 ResultSet 对象各列的编号、类型和属性。如果列名已知,但不知其索引,则可以使用 findColumn 方法来获取其列号。 在使用 getXXX 方法时...
`ResultSetMetaData`接口提供了有关`ResultSet`对象的信息,包括列的数量、类型和属性。`getMetaData()`方法用于获取此元数据对象。以下代码展示了如何使用`ResultSetMetaData`来获取列名: ```java ...
ResultSet对象提供了许多有用的方法来处理查询结果,以下是Java ResultSet常用方法的总结。 创建Statement对象 在使用ResultSet之前,需要首先创建一个Statement对象,该对象将生成具有给定类型和并发性的...
ResultSet是Java数据库连接(JDBC)中的一个重要接口,它用于存储和检索数据库查询结果。当执行SQL查询后,结果会被封装成ResultSet对象,允许我们逐行遍历并访问查询返回的数据。在处理ResultSet时,了解其属性和元...
这个工具类通常包含一个静态方法,接受ResultSet和JavaBean类型作为参数,然后遍历ResultSet,将数据填充到JavaBean对象中: ```java import java.sql.ResultSet; import java.sql.SQLException; public class ...
在Java编程中,数据处理是核心任务之一,而ResultSet、JSON和List是处理数据时常见的三种数据结构。ResultSet是数据库查询结果的载体,JSON是一种轻量级的数据交换格式,而List是Java集合框架中的动态数组。本文将...
ResultSet是Java数据库连接(JDBC)...在创建Statement或PreparedStatement对象时,通过设置适当的参数(如`ResultSet.TYPE_SCROLL_INSENSITIVE`,`ResultSet.CONCUR_UPDATABLE`等)来创建可滚动和可更新的ResultSet。
你可以通过设置`Statement`的属性来改变`ResultSet`的行为,例如设置其类型和并发性。 8. 实用工具和库: 一些第三方库如Apache Commons DBUtils提供了便捷的方法来处理`ResultSet`,如`QueryRunner`类,它可以简化...
在Java中,ResultSet是执行SQL查询后返回的结果集,它提供了遍历和访问数据库查询结果的方法。将ResultSet转换为Excel,首先需要创建一个HSSFWorkbook对象(对于.xls文件)或XSSFWorkbook对象(对于.xlsx文件),...
总结来说,从Java存储过程返回JDBC ResultSet作为REF CURSOR,主要是为了解决Oracle数据库的特性和JDBC的兼容问题。通过Oracle9i引入的特性,开发者可以利用这种方法在PL/SQL和Java之间更灵活地交换数据。然而,这种...
通过`Statement`接口的`createStatement`方法创建Statement对象时,可以通过传递`resultSetType`和`resultSetConcurrency`参数来控制ResultSet的行为。 - **resultSetType**:定义ResultSet的类型,可以是`...
本文将深入探讨ResultSet的两个关键特性:更新当前行的列值和使用插入行来添加新记录。 1. 更新当前行的列值: 当处理可更新的ResultSet时,我们可以修改当前行中的数据并保存这些更改到数据源。在给定的示例中,`...
总的来说,"resultset2xml"涉及到数据库操作、Java编程、XML序列化和数据转换等多方面的知识。理解这个过程对于开发处理数据库数据和跨系统数据交换的软件至关重要。无论是手动编写转换逻辑,还是利用现有库,都需要...
《JDBC和Oracle的参数设置和调用技术》这篇文献主要探讨了如何通过Java的JDBC接口调用Oracle数据库中的存储过程,以及不同类型的参数设置和处理方法。Oracle的存储过程是预编译的代码块,能提升系统性能,减少网络...
jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程
标题“ResultSet_to_json.jar”指的是一个Java应用程序,其主要功能是将数据库查询结果集(ResultSet)以及List等数据结构转换为JSON(JavaScript Object Notation)格式的字符串。JSON是一种轻量级的数据交换格式,...
- `resultSetType`:设置`ResultSet`的滚动模式,`ResultSet.TYPE_FORWARD_ONLY`表示仅支持前向滚动,`ResultSet.TYPE_SCROLL_INSENSITIVE`和`ResultSet.TYPE_SCROLL_SENSITIVE`则允许双向滚动,区别在于后者对数据...