JDBC 2.0

一、JDBC 2.0

在JDBC 2.0之后,为了方便操作者进行数据库的开发提供了许多更加方便的操作,包括可滚动的结果集和使用结果集直接更新数据库。

二、ResultSet中与JDBC 2.0有关的操作

1.设置ResultSet类型

static final int TYPE_FORWARD_ONLY    //表示指针只能向前移动的ResultSet,默认值
static final int TYPE_SCROLL_SENSITIVE    //表示ResultSet可以滚动,可以随着数据库变化而更新此ResultSet内容
static final int TYPE_SCROLL_INSENSITIVE    //表示ResultSet可以滚动,但是不能更新内容

2.设置并发型

static final int CONCUR_READ_ONLY    //按只读的方式打开数据库
static final int CONCUR_UPDATABLE    //表示通过操作ResultSet可以更新数据库内容

3.移动

boolean absolute(int row) throws SQLException    //将结果集移动到指定行
void afterLast() throws SQLException    //将结果集移动到末尾之后
void beforeFirst() throws SQLException    //将结果集移动到首行之前
boolean first() throws SQLException    //将结果集移动到第一行
boolean last() throws SQLException     //将结果集移动到最后一行
boolean previous() throws SQLException    //将结果集向上移动
void moveToInsertRow() throws SQLException    //将指针移动到插入行

4.更新

void updateString(int columnIndex,String x) throws SQLException    //指定更新列的内容,此方法被重载多次,支持各种数据类型
void updateString(String columnName,String x) throws SQLException    //指定更新列的内容,此方法被重载多次,支持各种数据类型

5.更新行与取消更新

void updateRow() throws SQLException    //更新行数据信息
void cancelRowUpdates() throws SQLException    //取消更新数据,在updateRow()调用之前有效

6.插入行与删除行数据

void insertRow() throws SQLException    //插入行数据
void deleteRow() throws SQLExcepiton    //删除行数据

三、实例

(1)结果集滚动

要创建可滚动的结果集,只需要在创建数据库操作对象时加入若干参数即可。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBC2ReadDemo{
	//mysql数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//mysql数据库连接地址
	public static final String DBURL="jdbc:mysql://localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//mysql数据库连接用户名
	public static final String DBUSER="root";
	//mysql数据库连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1、加载数据库驱动
		Class.forName(DBDRIVER);
		//2、获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3、实例化PreparedStatement对象和ResultSet对象
		String sql="SELECT id,name,password,age,sex,birthday FROM user";
		PreparedStatement pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
		ResultSet rs=pstmt.executeQuery();
		//4、进行结果集滚动操作
		System.out.println("第二条数据:");
		rs.absolute(1);
		print(rs,1);
		System.out.println("第一条数据:");
		rs.beforeFirst();
		print(rs,1);
		System.out.println("最后一条数据:");
		rs.afterLast();
		print(rs,-1);
		//5、关闭数据库连接
		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(1);
		String name=rs.getString(2);
		String pass=rs.getString(3);
		int age=rs.getInt(4);
		String sex=rs.getString(5);
		String d=rs.getString(6);
		System.out.print("编号:"+id+";");
		System.out.print("姓名:"+name+";");
		System.out.print("密码:"+pass+";");
		System.out.print("年龄:"+age+";");
		System.out.print("性别:"+sex+";");
		System.out.println("生日:"+d);
		System.out.println("----------------------");
	}
}

关键步骤:

//3、实例化PreparedStatement对象和ResultSet对象
String sql="SELECT id,name,password,age,sex,birthday FROM user";
PreparedStatement pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs=pstmt.executeQuery();
//4、进行结果集滚动操作
System.out.println("第二条数据:");
rs.absolute(1);
print(rs,1);
System.out.println("第一条数据:");
rs.beforeFirst();
print(rs,1);
System.out.println("最后一条数据:");
rs.afterLast();
print(rs,-1);

(2)结果集插入数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBC2InsertDemo{
	//mysql数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//mysql数据库连接地址
	public static final String DBURL="jdbc:mysql://localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//mysql数据库连接用户名
	public static final String DBUSER="root";
	//mysql数据库连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1、加载数据库驱动
		Class.forName(DBDRIVER);
		//2、获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3、实例化PreparedStatement和ResultSet对象
		String sql="SELECT id,name,password,age,sex,birthday FROM user";
		PreparedStatement pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
		ResultSet rs=pstmt.executeQuery();
		//4、使用ResultSet进行插入操作
		rs.moveToInsertRow();
		rs.updateString("name","aa");
		rs.updateString("password","aa");
		rs.updateInt("age",11);
		rs.updateString("sex","女");
		rs.updateDate("birthday",new java.sql.Date(new java.util.Date().getTime()));
		rs.insertRow();
		//5、关闭数据库连接
		rs.close();
		pstmt.close();
		conn.close();
	}
}

关键步骤:

//3、实例化PreparedStatement和ResultSet对象
String sql="SELECT id,name,password,age,sex,birthday FROM user";
PreparedStatement pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=pstmt.executeQuery();
//4、使用ResultSet进行插入操作
rs.moveToInsertRow();
rs.updateString("name","aa");
rs.updateString("password","aa");
rs.updateInt("age",11);
rs.updateString("sex","女");
rs.updateDate("birthday",new java.sql.Date(new java.util.Date().getTime()));
rs.insertRow();

(3)结果集更新数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBC2UpdateDemo{
	//mysql数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//mysql数据库连接地址
	public static final String DBURL="jdbc:mysql://localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//mysql数据库连接用户名
	public static final String DBUSER="root";
	//mysql数据库连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1、加载数据库驱动
		Class.forName(DBDRIVER);
		//2、获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3、实例化PreparedStatement和ResultSet对象
		String sql="SELECT id,name,password,age,sex,birthday FROM user WHERE id=?";
		PreparedStatement pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
		pstmt.setInt(1,3);
		ResultSet rs=pstmt.executeQuery();
		//4、进行更新操作
		rs.last();
		rs.updateString("name","aa");
		rs.updateString("password","aa");
		rs.updateInt("age",11);
		rs.updateString("sex","女");
		rs.updateDate("birthday",new java.sql.Date(new java.util.Date().getTime()));
		rs.updateRow();
		//5、关闭数据库连接
		rs.close();
		pstmt.close();
		conn.close();
	}
}

(4)结果集删除数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBC2DeleteDemo{
	//mysql数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//mysql数据库连接地址
	public static final String DBURL="jdbc:mysql://localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//mysql数据库连接用户名
	public static final String DBUSER="root";
	//mysql数据库连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1、加载数据库驱动
		Class.forName(DBDRIVER);
		//2、获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3、实例化PreparedStatement和ResultSet对象
		String sql="SELECT id,name,password,age,sex,birthday FROM user WHERE id=?";
		PreparedStatement pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
		pstmt.setInt(1,2);
		ResultSet rs=pstmt.executeQuery();
		//4、执行删除操作
		rs.last();
		rs.deleteRow();
		//5、关闭数据库连接
		rs.close();
		pstmt.close();
		conn.close();
	}
}

小结:

使用ResultSet结果集对数据库进行插入、更新和删除数据操作,关键步骤是分别使用rs.insertRow()、rs.updateRow()和rs.deleteRow()方法。

(5)批处理

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JDBC2BatchDemo{
	//mysql数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//mysql数据库连接地址
	public static final String DBURL="jdbc:mysql://localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//mysql数据库连接用户名
	public static final String DBUSER="root";
	//mysql数据库连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1、加载数据库驱动
		Class.forName(DBDRIVER);
		//2、获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3、实例化PreparedStatement对象
		String sql="INSERT INTO user(name,password,age,sex,birthday) VALUES(?,?,?,?,?)";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		for(int i=0;i<10;i++){
			pstmt.setString(1,""+i);
			pstmt.setString(2,""+i);
			pstmt.setInt(3,i);
			pstmt.setString(4,"男");
			pstmt.setDate(5,new Date(new java.util.Date().getTime()));
			pstmt.addBatch();
		}
		int temp[]=pstmt.executeBatch();
		System.out.println("更新了"+temp.length+"条数据。");
		//4、关闭数据库连接
		pstmt.close();
		conn.close();
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41027750/article/details/82810363
今日推荐