2010-09-03 101 views
1

我正在嘗試將包含12個數組的一個JAVA程序的輸出用於一羣不同的用戶,並將它們放入一個表中。無論如何要做到這一點大批量,而不必一次做一個?在MySQL中批量插入值

回答

2

我已經做到了,像這樣:

 
INSERT INTO my_users (name, passwd, somefield) 
VALUES 
('joe', 'pass', 'abc'), 
('jeff', 'pass1', 'abcd'), 
('jake', 'pass2', 'abcde') 
+0

我知道這不是你的例子的重點,但是......數據庫中的明文密碼?!? – Piskvor 2010-09-03 20:54:10

+5

那些只看起來純文本,這是我的加密是多麼的好:) – 2010-09-03 20:55:25

+0

啊,你實際上在'somefield'中存儲密碼,只是保持'passwd'來欺騙黑客,我明白了。非常狡猾,確實! – Quassnoi 2010-09-03 20:58:01

0

INSERT允許您一次插入多個值:

INSERT 
INTO 
    table 
    (column_a, column_b, column_c) 
VALUES 
    (1, 2, 3), 
    (4, 5, 6), 
    (7, 8, 9) 
; 

這是標準的SQL,並應在大多數數據庫工作。 (我遇到了一些例外情況:過時的數據庫和MSSQL,但您使用的是支持MySQL的數據庫)。

1

可以始終將數據寫入文件,並使用LOAD DATA INFILE語句批量將它們讀入數據庫。但取決於規模,這可能不值得擔心速度。

1

使用批量插入。從http://www.roseindia.net/jdbc/jdbc-mysql/PreparedStatementBatchUpdate.shtml適應:

Connection conn; 
    User[] users; 

    PreparedStatement prest = con.prepareStatement("INSERT INTO users VALUES(?,?)"); 

    conn.setAutoCommit(false); 
    for(user : users) { 
     prest.setString(1, User.getUserName()); 
     prest.setInt(2, User.getAge()); 
    } 
    prest.addBatch(); 

    int count[] = prest.executeBatch(); 

    conn.setAutoCommit(true); 
    prest.close(); 

在現實世界中,你將要與一羣try..finally塊灑,但我會假設你知道或者能找到其他地方如何做到這一點。

+0

玫瑰印度作爲引用?請。 – duffymo 2010-09-03 20:59:52

+0

需要查看語法,並且在一段時間內沒有這樣做......只是知道該找什麼:) – ykaganovich 2010-09-03 21:06:54