java学习笔记---Java中批处理SQL的使用方法(JDBC)

来源:互联网 发布:p2p网络投资 编辑:程序博客网 时间:2024/05/14 18:03

本文转自http://blog.sina.com.cn/s/blog_5c4331db0100hi77.html

 

今天面试时,面试官问了一个问题:如何一次性插入100条sql记录到数据表?

package soyatec.com.cn.test;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCBatchProcessing {

public static void main(String[] args) throws SQLException {
   try {
    Class.forName("org.gjt.mm.mysql.Driver");
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   String url = "jdbc:mysql://localhost/person";
   java.sql.Connection conn = null;
   try {
    conn = DriverManager.getConnection(url, "root", "shong");
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   //无参,添加案例
   //     Statement stmt = conn.createStatement();
   //     stmt.addBatch("insert into person(id, name) values(1,'shong')");
   //     stmt.addBatch("insert into person(id, name) values(2,\"hacks\")");
   //
   //     stmt.executeBatch();
   //     stmt.close();
   //     conn.close();

   //带参,添加案例
   PreparedStatement ps = conn
     .prepareStatement("insert into person(id, name) values(?,?)");

   ps.setInt(1, 3);//设置参数
   ps.setString(2, "elise");
   ps.addBatch(); //把语句加入批处理队列

   ps.setInt(1, 4);
   ps.setString(2, "plegall");
   ps.addBatch();

   ps.setInt(1, 5);
   ps.setString(2, "mike");
   ps.addBatch();

   ps.executeBatch(); //执行批处理

   ps.close(); //最后关闭
   conn.close();
}
//总结:
//1.stmt=conn.createStatement()这个后面的括号里面一般没有东西!!!
//2.pstmt=conn.prepareStament("insert into authors(firstName,lastName) values(?,?)")
//这个后面一定有sql语句,并且里面的参数是用?表示的。
//然后用pstmt.setString(1,"fegor")来设定它的值,1表示第1个问号的位置,"fegor",表示我们要加的值
//最后用pstmt.executeUpdate()去执行。

 

使用批量处理功能涉及下面的两个方法:
  · addBatch(String) 方法
  · executeBatch方法

method 1:

关于Statement 的简单范例可以是:

  Statement stmt = conn.createStatement();
  stmt.insert("DELETE FROM Users");
  stmt.insert("INSERT INTO Users VALUES("rod", 37, "circle")");
  stmt.insert("INSERT INTO Users VALUES("jane", 33, "triangle")");
  stmt.insert("INSERT INTO Users VALUES("freddy", 29, "square")");
  int[] counts = stmt.executeBatch();


method2:

PreparedStatement 有些不同,它只能处理一部分SQL语法,但是可以有很多参数,因此重写上面的范例的一部分就可以得到下面的结果:

PreparedStatement stmt = conn.prepareStatement("INSERT INTO Userinfo(username,password) VALUES(?,?)");
User[ ] users = addUser();//取得 要插入的数据的数组
for(int i=0; i<users.length;i++){
stmt.setString(1, users[i].getUsername());
stmt.setString(2, users[i].getPassword());
stmt.addBatch( );
}
int[ ] counts = stmt.executeBatch();

 

0 0