package com.yli.demo; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * Statement测试[ResultSet可滚动可更新结果集]<br> * 可滚动:对ResultSet可向前向后定位<br> * 可更新:ResultSet数据修改后可提交至数据库 */ public class ScrollStatementTest { public static void main(String[] args) { Test1(); } /** * 测试可滚动,可更新的结果集ResultSet */ public static void Test1() { try { Connection conn; conn = ConnectionUtil.getConnection(); /** * * ResultSet.TYPE_FORWARD_ONLY [结果集不可滚动] * ResultSet.TYPE_SCROLL_INSENSITIVE [结果集可滚动,且不可感知查询出来的数据是否有变化] * ResultSet.TYPE_SCROLL_SENSITIVE [结果集可滚动,可感知查询出来的数据是否有变化] * * ResultSet.CONCUR_READ_ONLY[结果集只读] * ResultSet.CONCUR_UPDATABLE[结果集可更新至数据库] */ // 创建[可滚动对数据更新不敏感]+[结果集可更新至数据库]的Statement Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); String sql = "select afficheid,affichetitle from ES_T_SHOP_AFFICHE"; ResultSet rs = statement.executeQuery(sql); // 检查是否可支持是否支持滚动与更新 DatabaseMetaData meta = conn.getMetaData(); boolean isSupport = meta.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE); System.out.println("===========>isSupport=" + isSupport); long id; String title; int currentRow; boolean isAvailable; /** * 像使用数组一样使用结果集ResultSet * absolute(rowId) 定位到第几行 * previous() 前一行数据 * next() 后一行数据 * getRow() 返回行号,如果返回0表示不可用:即在第一行之前或者最后一行之后 * * 如果当前一行已经在第一行,再回到前一行则返回false * 如果当前一行已经在最后一行,再回到后一行则返回false */ // 定位到第1行数据[从1开始计算] isAvailable = rs.absolute(1); // 同时返回值表示该行是否可用 id = rs.getLong("afficheid"); title = rs.getString("affichetitle"); currentRow = rs.getRow(); System.out.println("============>更新之前"); System.out.println("============>是否可用:" + isAvailable); System.out.println("============>当前行号:" + currentRow); System.out.println("============>id:" + id); System.out.println("============>title:" + title); System.out.println(); // 更改第一行数据[可更新] rs.updateString("affichetitle", "IT-EYE"); // ResultSet数据集已更新 rs.updateLong("afficheid", id); // ResultSet数据集已更新 rs.updateRow(); // ResultSet更新提交至数据库 id = rs.getLong("afficheid"); title = rs.getString("affichetitle"); currentRow = rs.getRow(); System.out.println("============>更新之后"); System.out.println("============>是否可用:" + isAvailable); System.out.println("============>当前行号:" + currentRow); System.out.println("============>id:" + id); System.out.println("============>title:" + title); System.out.println(); // 定位到第5行数据 isAvailable = rs.absolute(5); // 同时返回值表示该行是否可用 id = rs.getLong("afficheid"); title = rs.getString("affichetitle"); currentRow = rs.getRow(); System.out.println("============>是否可用:" + isAvailable); System.out.println("============>当前行号:" + currentRow); System.out.println("============>id:" + id); System.out.println("============>title:" + title); System.out.println(); // 定位到前一行 isAvailable = rs.previous(); // 同时返回值表示该行是否可用 id = rs.getLong("afficheid"); title = rs.getString("affichetitle"); currentRow = rs.getRow(); System.out.println("============>是否可用:" + isAvailable); System.out.println("============>当前行号:" + currentRow); System.out.println("============>id:" + id); System.out.println("============>title:" + title); System.out.println(); // 定位到后一行 isAvailable = rs.next(); id = rs.getLong("afficheid"); title = rs.getString("affichetitle"); currentRow = rs.getRow(); System.out.println("============>是否可用:" + isAvailable); System.out.println("============>当前行号:" + currentRow); System.out.println("============>id:" + id); System.out.println("============>title:" + title); System.out.println(); /** * 快捷方法 * first() 回到第一行 * isFirst() 是否在第一行 * * beforeFist() 回到第一行之前,那么getRow()其实为0,因为这一行前面肯定没数据 * ifBeforeFirst() 是否在第一行之前 * * afterLast() 回到最后一行之后,那么getRow()其实为0,因为这一行后面肯定没数据 * isAfterLast() 是否在第一行之前 */ boolean isFirst; boolean isLast; boolean ifBeforeFirst; boolean isAfterLast; // 定位到第一行 isAvailable = rs.first(); isFirst = rs.isFirst(); isLast = rs.isLast(); ifBeforeFirst = rs.isBeforeFirst(); isAfterLast = rs.isAfterLast(); id = rs.getLong("afficheid"); title = rs.getString("affichetitle"); currentRow = rs.getRow(); System.out.println("============>是否可用:" + isAvailable); System.out.println("============>当前行号:" + currentRow); System.out.println("============>是否第一行:" + isFirst); System.out.println("============>是否第一行之前:" + ifBeforeFirst); System.out.println("============>是否最后一行:" + isLast); System.out.println("============>是否最后一行之后:" + isAfterLast); System.out.println("============>id:" + id); System.out.println("============>title:" + title); System.out.println(); // 使用完毕之后ResultSet还是完整的ResultSet,跟数组一样 // 仍然可以普通方法使用ResultSet while(rs.next()){ // 正常从第一行读取,也可以使用updateRow()更新结果集 // do... } ConnectionUtil.close(conn); } catch (SQLException e) { e.printStackTrace(); } } }
相关推荐
JAVAJDBC基础.pdf
Java JDBC编程总结 Hibernate、TopLink等OR Mapping操作数据库的技术都是建立JDBC技术之上的,实际来说,他们的性能和JDBC是有很大...暂且不说这些孰优孰劣的话了,再次主要是对Java的基础技术做个总结,以加深认识。
重难点之JAVAJDBC基础.pdf
JAVA数据库编程JDBC 与 Java数据库接口JDBC入门基础讲座 与 JDBC API数据库编程实作教材-程序设计-JAVA JDBC全压缩包.rar
学习java DAO JDBC 基础代码,客户购买物品和订单事件
java基础JDBC连接Mysql数据库。
教程名称: 【动力节点】Java经典教程_JDBC视频教程 本套Java视频教程中讲解了Java编程语言如何连接数据库,对数据库中的数据进行增删改查操作,适合于已经学习过Java编程基础以及数据库的同学。Java教程中阐述了...
jdbc基础教材 数据库操作基础知识 入门书籍
java环境下的JDBC编程基础,详细说明JDBC工作原理及代码实现
帮助java初学者学习JDBC,提供一个简单的demo供大家下载
JDBC扩展包,其中包含基础包和拓展包,支持jdbc与数据库交互的更多功能,亲测可用,各jar包间无冲突
Java中JDBC增删改查相关基础练习的实例源代码
实现了员工的增删改查 可以连接数据库 含有数据库脚本 适合Java学习过后的小作业
Java JDBC(Java Database Connectivity)是Java编程语言中用于与数据库进行交互的标准API。下面是使用Java JDBC进行数据库操作的基本步骤: 加载数据库驱动程序。 建立数据库连接。 创建和执行SQL语句。 处理结果集...
java链接数据库的常用方法-- JDBC。 基本的JDBC知识介绍和使用。 可快速入门,也可当手册使用。 另外,最后还有一个JDBC工具类,以供使用。
JavaEE的知识点,包括servlet,jdbc,js,ssh框架的基础,原理。 收集总结了许多学长面试不同公司时面到的实际面试题。以及分享了回答问题的经验。 自己在去年10月份校招时,感觉有点用,特别是在给自己查漏补缺方面...
Java高级教程课件 java数据库教程 JDBC教程 2-oracle基础(1)(共48页).ppt Java高级教程课件 java数据库教程 JDBC教程 2-oracle基础(2)(共48页).ppt Java高级教程课件 java数据库教程 JDBC教程 3-oracle查询和SQL...
完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第11章 图形用户界面1(共27页).ppt 完整版精品java课件 Java基础入门...
JAVA_3 JAVA语言基础 位运算 JAVA_3 JAVA语言基础 JAVA_4 Java面向对象特性 JAVA_5 高级语言特征 JAVA_6 异常处理Exceptions JAVA_7 IO输入输出 JAVA_8 AWT图形界面编程 JFC AWT Swing JAVA_8 AWT图形界面编程 JFC ...
完整版 Java基础入门教程 Java程序语言设计 07 网络编程 JDBC(共21页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程 反射机制(共23页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程...