一、JDBC 的批量插入
JDBC 批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下
的等。
我用 Mysql 5.1.5 的 JDBC driver 分别对三种比较常用的方法做了测试
方法一,使用 PreparedStatement 加批量的方法
1. try{
2. Class.forName("com.mysql.jdbc.Driver");
3. conn=DriverManager.getConnection(o_url,userName,pa
ssword);
4. conn.setAutoCommit(false);
5. Stringsql="INSERTadlogs(ip,website,yyyymmdd,hour,ob
ject_id)VALUES(?,?,?,?,?)";
6. PreparedStatementprest=conn.prepareStatement(sql,Re
sultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ON
LY);
7. for(intx=0;x<size;x++){
8. prest.setString(1,"192.168.1.1");
9. prest.setString(2,"localhost");
10. prest.setString(3,"20081009");
11. prest.setInt(4,8);
12. prest.setString(5,"11111111");
13. prest.addBatch();
14. }
15. prest.executeBatch();
16. conn.commit();
17. conn.close();
18. }catch(SQLExceptionex){
19. Logger.getLogger(MyLogger.class.getName()).log(Level.SE
VERE,null,ex);
20. }catch(ClassNotFoundExceptionex){
21. Logger.getLogger(MyLogger.class.getName()).log(Level.S
EVERE,null,ex);
22. }
说明下在建 Statement 的时候,后面两个参数的意义:
第一个参数指定 ResultSet 的类型。其选项有:
TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其
他用户对该数据库所作更改的影响。
TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至可以进行
特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。
不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 一样,允许