`
chaoyi
  • 浏览: 309684 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDBC 2.0操作

 
阅读更多

本章目标
了解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条数据
 * */
}

 

 

 

 

  • 大小: 72.5 KB
  • 大小: 62.3 KB
分享到:
评论

相关推荐

    jdbc 2.0驱动程序jar包

    JDBC 2.0是这个接口的一个重要版本,它在JDBC 1.0的基础上进行了扩展,提供了更多的功能和优化,使得Java开发者能够更高效、更灵活地操作数据库。 在JDBC 2.0中,最重要的新特性包括: 1. **JDBC连接池**:JDBC ...

    MS-SQL jdbc 2.0

    6. **批处理**: MS-SQL JDBC 2.0 支持批处理操作,允许一次性发送多个SQL命令,提高效率。 7. **游标**: JDBC驱动提供了对游标的访问,允许你向前和向后移动结果集,以及处理大数据量的结果。 8. **事务管理**: ...

    JDBC2.0新功能

    JDBC 2.0还支持SQL3的数据类型,允许开发者在Java程序中使用更复杂的数据结构,增强了数据库操作的灵活性。 这些新特性显著提升了JDBC的功能性和效率,使得Java程序员在处理数据库时有了更多的选择和更好的性能...

    MS SQL Server JDBC驱动2.0版,sqljdbc_2.0

    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驱动包

    总结起来,sqljdbc_2.0驱动包是连接Java应用程序和SQL Server 2005的关键组件,它提供了必要的接口和功能,使得开发人员能够在Java环境中执行数据库操作。使用这个驱动包时,需要正确配置类路径,理解JDBC API,并...

    Microsoft SQL Server JDBC Driver 2.0

    Microsoft 一直致力于提高互操作性,已发布了新的 Java 数据库连接 (JDBC) 驱动程序。所有 SQL Server 用户都可以免费下载 SQL Server JDBC Driver 2.0,并可以从任何 Java 应用程序、应用程序服务器或支持 Java 的...

    jdbc2.0特性

    2. **游标控制**:JDBC 2.0引入了更多方法来控制游标的位置,使得开发者能更灵活地操作记录集。 - `absolute(int row)`:将游标移动到指定的绝对行号。 - `relative(int rows)`:将游标相对于当前位置移动指定的...

    sql server 2005/2000 jdbc2.0驱动

    综上所述,SQL Server 2005/2000 JDBC 2.0驱动是Java开发者与SQL Server数据库交互的关键组件,它提供了一种高效、跨平台的方式来访问和操作数据。通过正确配置和使用,可以大大提高数据库应用的开发效率和性能。

    sql server jdbc 驱动 2.0

    总结来说,SQL Server JDBC Driver 2.0是连接SQL Server数据库的理想选择,它的性能优化、丰富的功能和对新特性的支持,使得开发者可以高效、稳定地进行数据库操作。无论是在企业级应用开发还是在个人项目中,都值得...

    sqljdbc_2.0

    总的来说,"sqljdbc_2.0"是一个用于Java开发环境,特别是Eclipse的,针对SQL Server的JDBC驱动程序,提供数据库连接和数据操作的功能。它包括了安装指导,可能有中文文档,便于中国开发者使用,并且其版本号表明了它...

    sqlserver2000-jdbc2.0驱动

    总的来说,`sqljdbc4.jar`和`sqljdbc.jar`是连接Java应用与SQL Server 2000的关键组件,它们允许开发者利用JDBC接口执行数据库操作。正确配置和使用这些驱动,可以帮助确保Java应用与SQL Server 2000之间的稳定、...

    sqljdbc_2.0.1803.100_chs

    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

    【标题】"mm.mysql.jdbc-2.0pre5.tar" 提供的是 MySQL 数据库连接的 Java 驱动,这是一个早期版本的预发布软件(pre-release),版本号为2.0pre5。"tar"表明这是一个打包文件,通常用于在类Unix系统中归档多个文件和...

    Microsoft SQL Server JDBC Driver 2.0.rar

    Microsoft SQL Server JDBC Driver 2.0是微软官方提供的符合JDBC规范的驱动,使得Java开发者能够利用Java语言无缝地操作SQL Server数据库,无需学习新的数据库访问技术。 该压缩包中的主要内容包括: 1. 驱动jar包...

    SQL Server JDBC Driver 2.0

    Microsoft 一直致力于提高互操作性,已发布了新的 Java 数据库连接 (JDBC) 驱动程序。所有 SQL Server 用户都可以免费下载 SQL Server JDBC Driver 2.0,并可以从任何 Java 应用程序、应用程序服务器或支持 Java 的...

    jdbc sqlserver 驱动2.0

    总的来说,`SQL Server JDBC Driver 2.0`为Java开发者提供了高效、稳定的连接方式,使得Java应用程序能够充分利用SQL Server的特性,进行复杂的数据处理和事务操作。在实际项目中,开发者需要根据具体需求和环境选择...

Global site tag (gtag.js) - Google Analytics