[Java]ResultSet的用法与实例
JDBC API 2.0/3.0中ResultSet记录集的简便实用的新特性
1 新定义了若干个常数 这些常数用于指定ResultSet 的类型游标移动的方向等性质,如下所示:
public static final int FETCH_FORWARD; 该常数的作用是指定处理记录集中行的顺序,是由前到后即从第一行开始处理一直到最后一行;
public static final int FETCH_REVERSE; 该常数的作用是指定处理记录集中行的顺序,是由后到前即从最后一行开始处理一直到第一行;
public static final int FETCH_UNKNOWN; 该常数的作用是不指定处理记录集中行的顺序,由JDBC 驱动程序和数据库系统决定;
public static final int TYPE_FORWARD_ONLY; 该常数的作用是指定数据库游标的移动方向是向前,不允许向后移动即只能使用ResultSet 接口的next()方法而不能使用previous()方法否则会产生错误;
public static final int TYPE_SCROLL_INSENSITIVE; 该常数的作用是指定数据库游标可以在记录集中前后移动,并且当前数据库用户获取的记录集对其他用户的操作不敏感;就是说,当前用户正在浏览记录集中的数据,与此同时,其他用户更新了数据库中的数据,但是当前用户所获取的记录集中的数据不会受到任何影响。
public static final int TYPE_SCROLL_SENSITIVE; 该常数的作用是指定数据库游标可以在记录集中前后移动,并且当前数据库用户获取的记录集对其他用户的操作敏感,就是说,当前用户正在浏览记录集,但是其它用户的操作使数据库中的数据发生了变化,当前用户所获取的记录集中的数据也会同步发生变化,这样有可能会导致非常严重的错误产生建议慎重使用该常数。
public static final int CONCUR_READ_ONLY; 该常数的作用是指定当前记录集的协作方式(concurrencymode),为只读;一旦使用了这个常数,那么用户就不可以更新记录集中的数据。
public static final int CONCUR_UPDATABLE; 该常数的作用是指定当前记录集的协作方式(concurrencymode),为可以更新;一旦使用了这个常数,那么用户就可以使用updateXXX()等方法更新记。 2 ResultSet 接口提供了一整套的定位方法
这些可以在记录集中定位到任意一行:
public boolean absolute(int row); 该方法的作用是将记录集中的某一行设定为当前行,亦即将数据库游标移动到指定的行,参数row 指定了目标行的行号,这是绝对的行号,由记录集的第一行开始计算不是相对的行号。
public boolean relative(int rows); 该方法的作用也是将记录集中的某一行设定为当前行,但是它的参数rows 表示目标行相对于当前行的行号。
public boolean first(); 该方法的作用是将当前行定位到数据库记录集的第一行。
public boolean last(); 该方法的作用刚好和first()方法相反。
public boolean isFirst();
public boolean isFirst(); 该方法的作用是检查当前行是否记录集的第一行,如果是返回true, 否则返回false。
public boolean isLast(); 该方法的作用是检查当前行是否记录集的最后一行,如果是返回true ,否则返回false。
public void afterLast(); 该方法的作用是将数据库游标移到记录集的最后,位于记录集最后一行的后面,如果该记录集不包含任何的行该方法不产生作用。
public void beforeFirst(); 该方法的作用是将数据库游标移到记录集的最前面,位于记录集第一行的前面,如果记录集不包含任何的行该方法不产生作用。
public boolean isAfterLast(); 该方法检查数据库游标是否处于记录集的最后面,如果是返回true ,否则返回false。
public boolean isBeforeFirst(); 该方法检查数据库游标是否处于记录集的最前面,如果是返回true ,否则返回false。
public boolean next(); 该方法的作用是将数据库游标向前移动一位,使得下一行成为当前行,当刚刚打开记录集对象时,数据库游标的位置在记录集的最前面,第一次使用next()方法将会使数据库游标定位到记录集的第一行,第二次使用next()方法将会使数据库游标定位到记录集的第二行,以此类推。
public boolean previous(); 该方法的作用是将数据库游标向后移动一位,使得上一行成为当前行。 3 ResultSet 接口添加了对行操作的支持(最令人心动之处) 修改了的记录集接口(ResultSet 接口)的方法,使它支持可以滚动的记录集,即数据库游标可以在返回的记录集对象中自由地向前或向后滚动,或者定位到某个特殊的行。利用ResultSet 接口中定义的新方法,JSP/Servlet 程序员可以用Java 语言来更新记录集,比如插入记录,更新某行的数据,而不是靠执行SQL 语句,这样就大大方便了程序员的开发工作,享受Java 编程的乐趣了。
ResultSet 接口中新添加的部分方法如下所示:
public boolean rowDeleted(); 如果当前记录集的某行被删除了,那么记录集中将会留出一个空位;调用rowDeleted()方法,如果探测到空位的存在,那么就返回true; 如果没有探测到空位的存在,就返回false 值。
public boolean rowInserted(); 如果当前记录集中插入了一个新行,该方法将返回true ,否则返回false。
public boolean rowUpdated(); 如果当前记录集的当前行的数据被更新,该方法返回true ,否则返回false。
public void insertRow(); 该方法将执行插入一个新行到当前记录集的操作。
public void updateRow(); 该方法将更新当前记录集当前行的数据。
public void deleteRow(); 该方法将删除当前记录集的当前行。
public void updateString(int columnIndex String x); 该方法更新当前记录集当前行某列的值,该列的数据类型是String(指Java 数据类型是String ,与之对应的JDBC 数据类型是VARCHAR 或NVARCHAR 等数据类型) 。该方法的参数columnIndex 指定所要更新的列的列索引,第一列的列索引是1 ,以此类推,第二个参数x 代表新的值,这个方法并不执行数据库操作,需要执行insertRow()方法或者updateRow()方法以后,记录集和数据库中的数据才能够真正更新。
public void updateString(String columnName String x); 该方法和上面介绍的同名方法差不多,不过该方法的第一个参数是columnName ,代表需要更新的列的列名,而不是columnIndex。 往数据库当前记录集插入新行的操作流程如下:
1 调用moveToInsertRow()方法;
2 调用updateXXX()方法指定插入行各列的值;
3 调用insertRow()方法往数据库中插入新的行。 更新数据库中某个记录的值(某行的值)的方法是:
1 定位到需要修改的行(使用absolute() relative()等方法定位);
2 使用相应updateXXX()方法设定某行某列的新值;XXX 所代表的Java 数据类型,必须可以映射为某列的JDBC 数据类型,如果希望rollback 该项操作,请在调用updateRow()方法以前,使用cancelRowUpdates()方法,这个方法可以将某行某列的值复原;
3 使用updateRow()方法完成UPDATE 的操作。 删除记录集中某行(亦即删除某个记录)的方法:
1 定位到需要修改的行(使用absolute() relative()等方法定位);
2 使用deleteRow()
删除记录集中某行(亦即删除某个记录)的方法:
1 定位到需要修改的行(使用absolute() relative()等方法定位);
2 使用deleteRow()方法。 JDBC API 3.0 中还在ResultSet 接口中添加了updateArray() updateBlob() updateClob() updateRef()等方法1、java数据库操作基本流程2、几个常用的重要技巧:可滚动、更新的记录集批量更新事务处理 java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接1、取得数据库连接1)用DriverManager取数据库连接例子:String className,url,uid,pwd;
className = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;
uid = "system";
pwd = "manager";
Class.forName(className);
Connection cn = DriverManager.getConnection(url,uid,pwd);2)用jndi(java的命名和目录服务)方式例子String jndi = "jdbc/db";
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup(jndi);
Connection cn = ds.getConnection();多用于jsp中2、执行sql语句1)用Statement来执行sql语句String sql;
Statement sm = cn.createStatement();
sm.executeQuery(sql); // 执行数据查询语句(select)
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close();2)用PreparedStatement来执行sql语句String sql;
sql = "insert into user (id,name) values (?,?)";
PreparedStatement ps = cn.prepareStatement(sql);
ps.setInt(1,xxx);
ps.setString(2,xxx);
...
ResultSet rs = ps.executeQuery(); // 查询
int c = ps.executeUpdate(); // 更新3、处理执行结果查询语句,返回记录集ResultSet。更新语句,返回数字,表示该更新影响的记录数。ResultSet的方法:1、next(),将游标往后移动一行,如果成功返回true;否则返回false。2、getInt("id")或getSting("name"),返回当前游标下某个字段的值。3、释放连接。cn.close();一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection可滚动、更新的记录集1、创建可滚动、更新的StatementStatement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);该Statement取得的ResultSet就是可滚动的2、创建PreparedStatement时指定参数PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSet.absolute(9000);批量更新1、StatementStatement sm = cn.createStatement();
sm.addBatch(sql1);
sm.addBatch(sql2);
...
sm.executeBatch()一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有2、PreparedStatementPreparedStatement ps = cn.preparedStatement(sql);
{ps.setXXX(1,xxx);...ps.addBatch();
}
ps.executeBatch();一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。事务的处理1、关闭Connection的自动提交cn.setAutoCommit(false);2、执行一系列sql语句要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先closeStatement sm ;
sm = cn.createStatement(insert into user...);
sm.executeUpdate();
sm.close();sm = cn.createStatement("insert into corp...);
sm.executeUpdate();
sm.close();3、提交cn.commit();4、如果发生异常,那么回滚cn.rollback();
[Java]ResultSet的用法与实例相关推荐
- java resultset 映射到实例_[Java]ResultSet的用法与实例
JDBC API 2.0/3.0中ResultSet记录集的简便实用的新特性 1 新定义了若干个常数 这些常数用于指定ResultSet 的类型游标移动的方向等性质,如下所示: public stat ...
- Java—List的用法与实例详解
List特点和常用方法 List是有序.可重复的容器. 有序指的是:List中每个元素都有索引标记.可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素. 可重复指的是:List ...
- java -ArrayList的用法实例--学生宿舍管理系统
java -ArrayList的用法实例--学生宿舍管理系统 对于利用ArrayLis来实现增,删,改,查希望对大家有用! import java.util.*; import java.io.*; ...
- 四种Java线程池用法解析
四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...
- velocity用法简单实例说明 .
http://blog.csdn.net/renxianzuo/article/details/4457381 2009-08-18 01:48 3516人阅读 评论(8) 收藏 举报 velocit ...
- Java.io.File.getPath()方法实例
转载自 Java.io.File.getPath()方法实例 java.io.File.getPath() 方法将抽象路径名到路径名字符串.为了分离名称的序列所产生的字符串使用默认名称分隔符. 声明 ...
- AJAX for Java简单表数据查询实例
AJAX for Java简单表数据查询实例<?XML:NAMESPACE PREFIX = O /> AJAX WebShop 3对Java开发具有良好的支持,同时也提供了各种层次的后台 ...
- Java中SimpleDateFormat用法详解
Java中怎么才能把日期转换成想要的格式呢,或把字符串转换成一定格式的日期,如把数据库中的日期或时间转换成自己想要的格式,JAVA中提供了SimpleDateFormat类可以实现,以下是Simple ...
- Java ResultSet教程
Java ResultSet interface is a part of the java.sql package. It is one of the core components of the ...
最新文章
- Spark Shuffle 解析
- Visio studio 2019中opencv 4.1.1运行环境配置(亲测可用)
- valid, satisfiable, unsatisfiable的例子
- 嵌入式系统笔录(1)-嵌入式系统内核
- 应用程序窗口hwnd初始化_Golang OpenGL 跨平台图形程序开发(2)你好,窗口
- 新的Azure通信服务(ACS)如何实现WebRTC?
- oracle 分组后取每组第一条数据
- Springboot:监控与管理 Actuator
- 2020年8个效率最高的爬虫框架
- 20165235 第十周课下补做
- ESP32 LVGL8.1 ——Roller 滚动 (Roller 24)
- 专业的格式转换工具pdf2cad发布v11,支持当前所有的Windows和Mac操作系统
- error: invalid operands of types ‘QLabel*‘ and ‘void‘ to binary ‘operator>
- 2022茶艺师(初级)试题及在线模拟考试
- Java:爬取代理ip,并使用代理IP刷uv
- 无招胜有招——面向对象设计模式随笔,
- 房子要室内设计了,先从讲装修的施工工艺开始!
- 浮点型数据存储方式浅析
- C#Task执行线程及其相关问题
- 小鹏汽车领投 这家车规级MEMS激光雷达公司完成数亿元Pre-C轮融资