JDBC的批量处理

主要内容如下:

1、 Statement的excute()方法只能执行一条sql语句,但是使用addBath()方法将要执行的sql语句加进来,然后执行excuteBath()方法,可在一次方法调用中执行多条sql语句,这样可以提高执行效率。

2、 使用PreparedStatement也可以进行批量处理。

3、 注意:批处理中执行的语句只能是更新语句(insert、delete、update),否则会抛出异常

4、 (1)实例部分代码分析:

创建TestBatch,包含main()方法

Connection con=null;

Statement stat=null;

Con.JdbcUtil.getConnection; //获取连接

stat.addBatch(“插入记录sql语句”); //添加sql语句到批中

stat.excuteBatch(); //提交到mysql中

以上是用Statement完成批量处理的。、

(2)或者还可以用PreparedStatement完成批量处理。

用for循环来完成。

List<Student> list=new ArrayList<Student>; //使用泛型

注意:批量中执行的语句只能是更新。

简单的来说,JDBC可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。

PreparedStatement表示预编译的SQL语句的对象。

一、对获得Connection对象进行封装,

(1) 将数据库的配置信息写到一个属性文件中,然后用IO流去获取,当需要修改数据库连接的时候只要改动配置文件即可。

(2) 在src下新建属性文件jdbc.properties,添加内容如下:

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/数据库名称

username=root;

password=1234;

二、 对关闭JDBC资源类的封装

新建DbClose.java类,添加方法关闭结果集对象、语句对象、连接对象。 

在执行增加、删除、修改的时候可以使用代码关闭连接:DbClose.close(Statement stmt, Connection conn);

在执行查询之后使用如下代码关闭连接:DbClose.close(ResultSet rs, Statement stmt, Connection conn);

下面老师还讲了几个内容,如下:

一、 分页

通过ResultSet的滚动可以设置获取记录的位置,但这样是从数据库中查询出所有数据,再从结果中筛选性能非常低。

每一页显示几条记录     5

想显示第几页:第3页 (3-1)*5+1   如果是从0开始,则不用加1,第三页的第一行记录号。

MySql提供了分页语法,在查询语句后使用limit关键字完成分页的功能。

例如:select * from 表 limit 40,20;

查询表中取出从第41条开始的20条记录,第一个参数表示忽略前面多少个,第二个参数代表取多少个。

二、 可更新结果集、敏感结果集

conn.createStatement(ResultSet.Type_scroll_Sensitive,ResultSet.concur_Updadbble);

结果集是一个可滚动的结果集。

敏感结果集与不敏感结果集的区别:

MySql不支持敏感结果集, ResultSet Type_scroll sensitive

在查询到结果集的之后,可以直接通过修改结果集而是数据库中的记录同时发生变化,方法:把结果集设置成可更新结果集。不推荐这样做。如果想更新数据库记录,最要显性调用update语句。

代码如下:

1. static void read() throws SQLException, InterruptedException {  

2.         Connection conn = null;  

3.         Statement st = null;  

4.         ResultSet rs = null;  

5.         try {  

6.             // 2.建立连接   

7.             conn = JdbcUtils.getConnection();  

8.             // conn = JdbcUtilsSing.getInstance().getConnection();   

9.             // 3.创建语句   

10.             st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,  

11.                     ResultSet.CONCUR_UPDATABLE);  

12.   

13.             // 4.执行语句   

14.             rs = st  

15.                     .executeQuery("select id, name, money, birthday  from user where id < 5");  

16.   

17.             // 5.处理结果   

18.             while (rs.next()) {  

19.                 int id = rs.getInt("id");  

20.                 System.out.println("show " + id + "...");  

21.                 Thread.sleep(10000);  

22.                 System.out.println(id + "/t" + rs.getObject("name") + "/t"  

23.                         + rs.getObject("birthday") + "/t"  

24.                         + rs.getObject("money"));  

25.             }  

26.         } finally {  

27.             JdbcUtils.free(rs, st, conn);  

28.         }  

29.     }  

Statement st=con.createStatement(但参数的);

先定位游标 if(rs.next()){

rs.getObject(1)

}

rs.updateString(2,”Tom”);   //2代表哪一行的第几列

rs.updateRow(); //提交修改

三、 元信息

结果集元信息。

代码解析如下:新建类TestDatabaseMetaData 包含main()方法

接口:DatabaseMetaData

1)数据库元数据的获取:

DatabaseMetaData dmd=con.getMetaData(); //获取数据库的元数据

dmd.getDatabase ProductName(); //获取驱动名称

dmd.getDriverName(); //获取驱动的名称

dmd.getDatabaseProductVersion(); //获取驱动版本号

dmd.getDefaltTransactionIsolation(); //获取默认隔离级别

(3) 结果集元数据的获取

ResultSetMetaData resmd=null;

resmd=res.getMetaData(); //获取结果集的元数据

resmd.getColumnCount(); //获取一共有多少列

for(int i=1;i<=resmd.getColumnCount();i++){

resmd.getColumnLabel(i); //获取每一列的名称

}

resmd.getColumnType(); //获取类型

resmd.getColumnTyoeName(); //获取类型名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值