2010-09-03 64 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