本章目标
了解JDBC 2.0提供的主要新特性
了解可滚动结果集的操作
了解结果集的增加、修改、删除操作
掌握批处理操作
JDBC 2.0操作
之前所讲解的大部分操作都是属于最基本的JDBC操作,在JDBC 2.0之后为了方便操作者进行数据库的开发提供了许多更加方便的操作,包括,可滚动的结果集,以及使用结果集直接更新数据库,如果要使用这样的特性则就必须依靠ResultSet。
JDBC 2.0对ResultSet的支持
可滚动的结果集
如果现在想取结果集中任意位置的数据,则就必须使用可滚动的结果集,可滚动的结果集操作本身并不难理解,只是在创建数据库操作对象时加入若干参数即可,如下所示:
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY); // 实例化对象
rs = pstmt.executeQuery() ; // 实例化ResultSet对象
让结果集滚动起来
第二条数据:
——rs.absolute(1) ;
第一条数据:
——rs.beforeFirst() ;
第三条数据:
——rs.afterLast() ;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JDBC20ReadDemo { public static void main(String[] args) throws Exception { Connection conn=null; //数据库连接 PreparedStatement pstmt = null;//数据库操作 ResultSet rs = null;//保存查询结果 String sql ="select id, name, age, sex, birthday from consumer"; Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 //连接数据库 conn=DriverManager.getConnection("jdbc:oracle:thin:gome/gome@localhost:1521:oracle11"); //实例化对象 pstmt = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); //实例化 ResultSet 对象 rs = pstmt.executeQuery(); System.out.println("第 2 条数据:"); rs.absolute(1); print(rs, 1); System.out.println("第 1 条数据:"); rs.beforeFirst(); print(rs, 1); System.out.println("第 3 条数据:"); rs.afterLast(); print(rs, -1); rs.close();//关闭结果集 pstmt.close();//操作关闭 conn.close(); //数据库关闭 } public static void print(ResultSet rs, int re) throws Exception{ if(re >0){ rs.next();//由前向后输出 }else{ rs.previous();//由后向前输出 } int id = rs.getInt("id");//取得 id 内容 String name = rs.getString("name");//取得 name 内容 int age = rs.getInt("age");//取得 age 内容 String sex =rs.getString("sex");//取得 sex 内容 java.util.Date birthday = rs.getDate("birthday");//取得 birthday 内容 System.out.print("编号:"+id+"; ");//输出编号 System.out.print("姓名:"+name+"; ");//输出姓名 System.out.print("年龄:"+age+"; ");//输出年龄 System.out.print("性别:"+sex+"; ");//输出性别 System.out.print("生日:"+birthday);//输出生日 System.out.println("\n-----------------------------");//换行 } /* 结果: * 第 2 条数据: * 编号:2; 姓名:chaoyi; 年龄:30; 性别:男; 生日:2014-07-03 * ----------------------------- * 第 1 条数据: * 编号:1; 姓名:yike; 年龄:30; 性别:男; 生日:2014-07-03 * ----------------------------- * 第 3 条数据: * 编号:3; 姓名:chaoyv; 年龄:30; 性别:男; 生日:2014-07-03 * ----------------------------- * */ }
使用结果集插入数据
在JDBC 2.0中,如果要想进行数据库的更新操作,则在创建PreparedStatement对象的时候必须指定结果集是可以更新数据库的,如下所示:
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE); // 实例化对象
直接在 consumer 表中增加数据
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JDBC20InsertDemo { public static void main(String[] args) throws Exception { Connection conn=null; //数据库连接 PreparedStatement pstmt = null;//数据库操作 ResultSet rs = null;//保存查询结果 //此处不需要设置任何内容 String sql ="select id, name, age, sex, birthday from consumer"; Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 //连接数据库 conn=DriverManager.getConnection("jdbc:oracle:thin:gome/gome@localhost:1521:oracle11"); //实例化对象 pstmt = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); //实例化 ResultSet 对象 rs = pstmt.executeQuery(); rs.moveToInsertRow();//移动到可以插入的数据行 rs.updateInt("id", 6);//设置要插入的id rs.updateString("name", "chaoyi77");//设置要插入的姓名 rs.updateInt("age", 23);//设置要插入的 age rs.updateString("sex", "男");//设置要插入的 sex //将今天的日期设置为生日 rs.updateDate("birthday", new java.sql.Date(new java.util.Date().getTime())); rs.insertRow();//插入数据 rs.close();//关闭结果集 pstmt.close();//操作关闭 conn.close(); //数据库关闭 } /* 结果:向数据库增加一条数据 * */ }
使用结果集更新数据
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JDBC20UpdateDemo { public static void main(String[] args) throws Exception { Connection conn=null; //数据库连接 PreparedStatement pstmt = null;//数据库操作 ResultSet rs = null;//保存查询结果 //此处使用预处理操作 String sql ="select id, name, age, sex, birthday from consumer where id=?"; Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 //连接数据库 conn=DriverManager.getConnection("jdbc:oracle:thin:gome/gome@localhost:1521:oracle11"); //实例化对象 pstmt = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); pstmt.setInt(1, 4);//更新 4 号用户 //实例化 ResultSet 对象 rs = pstmt.executeQuery(); rs.last();//移动到最后一行 rs.updateString("name", "chaoyi");//设置要插入的姓名 rs.updateInt("age", 23);//设置要插入的 age rs.updateString("sex", "男");//设置要插入的 sex //将今天的日期设置为生日 rs.updateDate("birthday", new java.sql.Date(new java.util.Date().getTime())); rs.updateRow();//更新数据 rs.close();//关闭结果集 pstmt.close();//操作关闭 conn.close(); //数据库关闭 } /* 结果:使用结果集更新 * */ }
更新取消
在执行updateRow()方法前,如果发现数据库更新有错误,则可以使用cancelRowUpdates()方法取消掉之前的更新,这样就算再执行updateRow()方法,也不会去更新数据库,如下所示:
——rs.cancelRowUpdates() ; // 取消更新
——rs.updateRow() ; // 更新数据
使用结果集删除数据
...
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE); // 实例化对象
pstmt.setInt(1, 2) ; // 删除2号用户
rs = pstmt.executeQuery() ; // 实例化ResultSet对象
rs.last() ; // 移动到最后一行
rs.deleteRow() ; // 删除数据
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JDBC20DeleteDemo { public static void main(String[] args) throws Exception { Connection conn=null; //数据库连接 PreparedStatement pstmt = null;//数据库操作 ResultSet rs = null;//保存查询结果 //此处使用预处理操作 String sql ="select id, name, age, sex, birthday from consumer where id=?"; Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 //连接数据库 conn=DriverManager.getConnection("jdbc:oracle:thin:gome/gome@localhost:1521:oracle11"); //实例化对象 pstmt = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); pstmt.setInt(1, 6);//更新 6 号用户 //实例化 ResultSet 对象 rs = pstmt.executeQuery(); rs.last();//移动到最后一行 rs.deleteRow();//删除数据 rs.close();//关闭结果集 pstmt.close();//操作关闭 conn.close(); //数据库关闭 } /* 结果:删除指定编号的数据 * */ }
批处理
在JDBC 2.0之中,最重要的概念就应该是批处理操作了。使用批处理可以一次性的插入多条SQL语句,如果要完成批处理操作,则要使用addBatch()加入要执行的一条SQL命令以及executeBatch()执行全部命令两个方法完成。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class CopyOfJDBC20BatchDemo { public static void main(String[] args) throws Exception { Connection conn=null; //数据库连接 PreparedStatement pstmt = null;//数据库操作 //此处使用预处理操作 String sql ="insert into consumer (ID, NAME, AGE, SEX, BIRTHDAY)" + "values (id_seq.nextval, ?, ?, ?, to_date(?, 'yyyy-mm-dd'))"; Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 //连接数据库 conn=DriverManager.getConnection("jdbc:oracle:thin:gome/gome@localhost:1521:oracle11"); //实例化对象 pstmt = conn.prepareCall(sql); for(int i=0; i<10; i++){ pstmt.setString(1, "chaoyi"); pstmt.setInt(2, 30); pstmt.setString(3, "男"); pstmt.setString(4, "1991-10-16"); pstmt.addBatch();//加入批处理等待执行 } int temp[] =pstmt.executeBatch();//批量执行 System.out.println("更新了"+temp.length+"条数据"); pstmt.close();//操作关闭 conn.close(); //数据库关闭 } /* 结果:批量插入数据 * 更新了10条数据 * */ }
相关推荐
JDBC 2.0是这个接口的一个重要版本,它在JDBC 1.0的基础上进行了扩展,提供了更多的功能和优化,使得Java开发者能够更高效、更灵活地操作数据库。 在JDBC 2.0中,最重要的新特性包括: 1. **JDBC连接池**:JDBC ...
6. **批处理**: MS-SQL JDBC 2.0 支持批处理操作,允许一次性发送多个SQL命令,提高效率。 7. **游标**: JDBC驱动提供了对游标的访问,允许你向前和向后移动结果集,以及处理大数据量的结果。 8. **事务管理**: ...
JDBC 2.0还支持SQL3的数据类型,允许开发者在Java程序中使用更复杂的数据结构,增强了数据库操作的灵活性。 这些新特性显著提升了JDBC的功能性和效率,使得Java程序员在处理数据库时有了更多的选择和更好的性能...
MS SQL Server JDBC驱动2.0版是用于连接Java应用程序与Microsoft SQL Server数据库的桥梁,尤其针对SQL Server 2000和2005版本。JDBC(Java Database Connectivity)是一种Java API,它允许Java程序通过Java编程语言...
总结起来,sqljdbc_2.0驱动包是连接Java应用程序和SQL Server 2005的关键组件,它提供了必要的接口和功能,使得开发人员能够在Java环境中执行数据库操作。使用这个驱动包时,需要正确配置类路径,理解JDBC API,并...
Microsoft 一直致力于提高互操作性,已发布了新的 Java 数据库连接 (JDBC) 驱动程序。所有 SQL Server 用户都可以免费下载 SQL Server JDBC Driver 2.0,并可以从任何 Java 应用程序、应用程序服务器或支持 Java 的...
2. **游标控制**:JDBC 2.0引入了更多方法来控制游标的位置,使得开发者能更灵活地操作记录集。 - `absolute(int row)`:将游标移动到指定的绝对行号。 - `relative(int rows)`:将游标相对于当前位置移动指定的...
综上所述,SQL Server 2005/2000 JDBC 2.0驱动是Java开发者与SQL Server数据库交互的关键组件,它提供了一种高效、跨平台的方式来访问和操作数据。通过正确配置和使用,可以大大提高数据库应用的开发效率和性能。
总结来说,SQL Server JDBC Driver 2.0是连接SQL Server数据库的理想选择,它的性能优化、丰富的功能和对新特性的支持,使得开发者可以高效、稳定地进行数据库操作。无论是在企业级应用开发还是在个人项目中,都值得...
总的来说,"sqljdbc_2.0"是一个用于Java开发环境,特别是Eclipse的,针对SQL Server的JDBC驱动程序,提供数据库连接和数据操作的功能。它包括了安装指导,可能有中文文档,便于中国开发者使用,并且其版本号表明了它...
总的来说,`sqljdbc4.jar`和`sqljdbc.jar`是连接Java应用与SQL Server 2000的关键组件,它们允许开发者利用JDBC接口执行数据库操作。正确配置和使用这些驱动,可以帮助确保Java应用与SQL Server 2000之间的稳定、...
SQL JDBC驱动是Java Database Connectivity (JDBC)的一部分,它允许Java开发者使用标准的Java API来访问和操作SQL Server数据库。版本号“2.0.1803.100_chs”揭示了一些关键信息: 1. **版本号**:2.0表示这是驱动...
【标题】"mm.mysql.jdbc-2.0pre5.tar" 提供的是 MySQL 数据库连接的 Java 驱动,这是一个早期版本的预发布软件(pre-release),版本号为2.0pre5。"tar"表明这是一个打包文件,通常用于在类Unix系统中归档多个文件和...
Microsoft SQL Server JDBC Driver 2.0是微软官方提供的符合JDBC规范的驱动,使得Java开发者能够利用Java语言无缝地操作SQL Server数据库,无需学习新的数据库访问技术。 该压缩包中的主要内容包括: 1. 驱动jar包...
Microsoft 一直致力于提高互操作性,已发布了新的 Java 数据库连接 (JDBC) 驱动程序。所有 SQL Server 用户都可以免费下载 SQL Server JDBC Driver 2.0,并可以从任何 Java 应用程序、应用程序服务器或支持 Java 的...
总的来说,`SQL Server JDBC Driver 2.0`为Java开发者提供了高效、稳定的连接方式,使得Java应用程序能够充分利用SQL Server的特性,进行复杂的数据处理和事务操作。在实际项目中,开发者需要根据具体需求和环境选择...