您的位置:首页 > 编程语言

22---数库编程11(JDBC2.0)

2012-03-19 09:54 169 查看
在JDBC2.0中,加强了结果集ResultSet的功能,可以直接使用ResultSet执行更新的操作,或者实现双向滚动;

在JDBC2.0中有个重要的概念:批处理;

1、可滚动的结果集:

在创建PreparedStatement或者Statement的时候必须指定创建的类型;

jdbc2.0的双向读取:

/*---创建数据库表

drop table user;

create table user(

id int auto_increment primary key,

name varchar(30) not null,

password varchar(32) not null,

age int not null,

sex varchar(2) default '男',

birthday Date

);

*/

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.PreparedStatement;

import java.sql.Blob;

import java.sql.ResultSet;

import java.util.*;

import java.io.*;

import java.text.*;

public class Demo{

//定义数据库的驱动程序

public static final String DBDRIVER="org.gjt.mm.mysql.Driver";

//定义数据库的连接地址:

public static final String DBURL="jdbc:mysql://localhost:3306/lid";

//定义数据库的用户名

public static final String DBUSER="root";

//定义数据库的密码

public static final String DBPASSWORD="123";

public static void main(String args[]) throws Exception{

Connection conn=null;

PreparedStatement pstmt=null;//数据库操作

ResultSet rs=null;

String sql="select id,name,password,age,sex,birthday from user";

//加载数据库驱动

Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);

//双向可滚动可修改的只读的结果集

pstmt=conn.prepareStatement(sql,

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

rs=pstmt.executeQuery();

//rs默认指的是第一条数据的前面,所以rs.next()后才指向第一条数据

System.out.println("输出第2条数据:");

rs.absolute(1);//将其定位到第一条数据上

print(rs,1);

System.out.println("输出第1条数据:");

rs.beforeFirst();//将光标定位到第一条数据的前面,即rs.next()时指向第一条

print(rs,1);

System.out.println("输出最后一条数据");

rs.afterLast();

print(rs,-1);

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 password=rs.getString(3);

int age=rs.getInt(4);

String sex=rs.getString(5);

java.util.Date d=rs.getDate(6);

System.out.print("编号:"+id);

System.out.print("姓名:"+name);

System.out.print("密码:"+password);

System.out.print("年龄:"+age);

System.out.print("性别:"+sex);

System.out.println("生日:"+d);

System.out.println("-------------------------------------------------");

}

}

如果程序真的采用此种开发的话,则内存的损耗会非常的大;

所以一般情况下是不采用可滚动的结果集的;

2、使用结果集插入数据:----即在最后一条记录后面插入数据

如果想要使用ResultSet插入数据,则在创建数据库操作的时候就必须选择好允许更新;

/*---创建数据库表

drop table user;

create table user(

id int auto_increment primary key,

name varchar(30) not null,

password varchar(32) not null,

age int not null,

sex varchar(2) default '男',

birthday Date

);

*/

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.PreparedStatement;

import java.sql.Blob;

import java.sql.ResultSet;

import java.util.*;

import java.io.*;

import java.text.*;

public class Demo{

//定义数据库的驱动程序

public static final String DBDRIVER="org.gjt.mm.mysql.Driver";

//定义数据库的连接地址:

public static final String DBURL="jdbc:mysql://localhost:3306/lid";

//定义数据库的用户名

public static final String DBUSER="root";

//定义数据库的密码

public static final String DBPASSWORD="123";

public static void main(String args[]) throws Exception{

Connection conn=null;

PreparedStatement pstmt=null;//数据库操作

ResultSet rs=null;

String sql="select id,name,password,age,sex,birthday from user";

//加载数据库驱动

Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);

//双向可滚动可修改的可修改的结果集

pstmt=conn.prepareStatement(sql,

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

rs=pstmt.executeQuery();

rs.moveToInsertRow();//移动到插入的一行,即最后一行

rs.updateString("name","xiaopihai");

rs.updateString("password","666");

rs.updateInt("age",20);

rs.updateString("sex","女");

rs.updateDate("birthday",new java.sql.Date(new java.util.Date().getTime()));

rs.insertRow();//真正的提交插入

rs.close();

pstmt.close();

conn.close();

}

}

3、使用结果集进行更新:

用结果集进行更新首先的查询;

/*---创建数据库表

drop table user;

create table user(

id int auto_increment primary key,

name varchar(30) not null,

password varchar(32) not null,

age int not null,

sex varchar(2) default '男',

birthday Date

);

*/

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.PreparedStatement;

import java.sql.Blob;

import java.sql.ResultSet;

import java.util.*;

import java.io.*;

import java.text.*;

public class Demo{

//定义数据库的驱动程序

public static final String DBDRIVER="org.gjt.mm.mysql.Driver";

//定义数据库的连接地址:

public static final String DBURL="jdbc:mysql://localhost:3306/lid";

//定义数据库的用户名

public static final String DBUSER="root";

//定义数据库的密码

public static final String DBPASSWORD="123";

public static void main(String args[]) throws Exception{

Connection conn=null;

PreparedStatement pstmt=null;//数据库操作

ResultSet rs=null;

String sql="select id,name,password,age,sex,birthday from user where id=4";

//加载数据库驱动

Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);

//双向可滚动可修改的可修改的结果集

pstmt=conn.prepareStatement(sql,

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

rs=pstmt.executeQuery();

rs.last();//查询出一条来,所以定位到最后,就是定位到查出的这条数据

rs.updateString("name","外星人");

rs.updateString("password","888");

rs.updateInt("age",20);

rs.updateString("sex","女");

rs.updateDate("birthday",new java.sql.Date(new java.util.Date().getTime()));

rs.updateRow();//真正的提交更新

rs.close();

pstmt.close();

conn.close();

}

}

如果更新之前使用了使用了调用了取消操作cancelRowUpdates() ,则就不能实现更新了

rs.cancelRowUpdates();//取消更新

rs.updateRow();//真正的提交更新

如果这样,则不会进行更新;

4、使用结果集删除数据:

直接移动到要删除的位置,使用deleteRow()即可;

/*---创建数据库表

drop table user;

create table user(

id int auto_increment primary key,

name varchar(30) not null,

password varchar(32) not null,

age int not null,

sex varchar(2) default '男',

birthday Date

);

*/

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.PreparedStatement;

import java.sql.Blob;

import java.sql.ResultSet;

import java.util.*;

import java.io.*;

import java.text.*;

public class Demo{

//定义数据库的驱动程序

public static final String DBDRIVER="org.gjt.mm.mysql.Driver";

//定义数据库的连接地址:

public static final String DBURL="jdbc:mysql://localhost:3306/lid";

//定义数据库的用户名

public static final String DBUSER="root";

//定义数据库的密码

public static final String DBPASSWORD="123";

public static void main(String args[]) throws Exception{

Connection conn=null;

PreparedStatement pstmt=null;//数据库操作

ResultSet rs=null;

String sql="select id,name,password,age,sex,birthday from user where id=5";

//加载数据库驱动

Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);

//双向可滚动可修改的可修改的结果集

pstmt=conn.prepareStatement(sql,

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

rs=pstmt.executeQuery();

rs.last();//查询出一条来,所以定位到最后,就是定位到查出的这条数据

rs.deleteRow();

rs.close();

pstmt.close();

conn.close();

}

}

5、批处理操作就是指一次性向数据库执行多条语句,一次提交;

加入语句:

void addBatch() throws SQLException

执行语句:

int[] executeBatch() throws SQLException

所有的SQL语句,一次性提交过去;

/*---创建数据库表

drop table user;

create table user(

id int auto_increment primary key,

name varchar(30) not null,

password varchar(32) not null,

age int not null,

sex varchar(2) default '男',

birthday Date

);

*/

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.PreparedStatement;

import java.sql.Blob;

import java.sql.ResultSet;

import java.util.*;

import java.io.*;

import java.text.*;

public class Demo{

//定义数据库的驱动程序

public static final String DBDRIVER="org.gjt.mm.mysql.Driver";

//定义数据库的连接地址:

public static final String DBURL="jdbc:mysql://localhost:3306/lid";

//定义数据库的用户名

public static final String DBUSER="root";

//定义数据库的密码

public static final String DBPASSWORD="123";

public static void main(String args[]) throws Exception{

Connection conn=null;

PreparedStatement pstmt=null;//数据库操作

ResultSet rs=null;

String sql="insert into user(name,password,age,sex,birthday)"+

"values (?,?,?,?,?)";

//加载数据库驱动

Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);

//双向可滚动可修改的可修改的结果集

pstmt=conn.prepareStatement(sql);

for(int i=0;i<5;i++){

pstmt.setString(1,"李丹_"+i);

pstmt.setString(2,"666"+i);

pstmt.setInt(3,20);

pstmt.setString(4,"男");

pstmt.setDate(5,new java.sql.Date(new java.util.Date().getTime()));

pstmt.addBatch();//添加批处理,等待执行

}

int[] j=pstmt.executeBatch();//执行批处理

System.out.println("添加了:"+j.length+"条记录.");

pstmt.close();

conn.close();

}

}

当然Statement也可以实现批出;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: