猿问

Java:使用PreparedStatement在MySQL中插入多行

Java:使用PreparedStatement在MySQL中插入多行

我想使用Java一次将多行插入MySQL表。行数是动态的。过去我在做......

for (String element : array) {
    myStatement.setString(1, element[0]);
    myStatement.setString(2, element[1]);

    myStatement.executeUpdate();}

我想优化它以使用MySQL支持的语法:

INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...]

但是PreparedStatement我不知道有什么方法可以做到这一点,因为我事先不知道array会包含多少元素。如果a不可能PreparedStatement,我还能怎么做(并且仍然逃避数组中的值)?


茅侃侃
浏览 600回答 3
3回答

慕容3067478

您可以通过创建批处理PreparedStatement#addBatch()并执行它PreparedStatement#executeBatch()。这是一个启动示例:public&nbsp;void&nbsp;save(List<Entity>&nbsp;entities)&nbsp;throws&nbsp;SQLException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;connection&nbsp;=&nbsp;database.getConnection(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;statement&nbsp;=&nbsp;connection.prepareStatement(SQL_INSERT); &nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Entity&nbsp;entity&nbsp;:&nbsp;entities)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statement.setString(1,&nbsp;entity.getSomeProperty()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statement.addBatch(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(i&nbsp;%&nbsp;1000&nbsp;==&nbsp;0&nbsp;||&nbsp;i&nbsp;==&nbsp;entities.size())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statement.executeBatch();&nbsp;//&nbsp;Execute&nbsp;every&nbsp;1000&nbsp;items. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}它每1000个项目执行一次,因为某些JDBC驱动程序和/或DB可能对批处理长度有限制。另见:JDBC教程 - 使用PreparedStatementJDBC教程 - 使用语句对象进行批量更新

潇湘沐

如果您可以动态创建sql语句,则可以执行以下解决方法:&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;myArray[][]&nbsp;=&nbsp;{&nbsp;{&nbsp;"1-1",&nbsp;"1-2"&nbsp;},&nbsp;{&nbsp;"2-1",&nbsp;"2-2"&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;"3-1",&nbsp;"3-2"&nbsp;}&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;mySql&nbsp;=&nbsp;new&nbsp;StringBuffer( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"insert&nbsp;into&nbsp;MyTable&nbsp;(col1,&nbsp;col2)&nbsp;values&nbsp;(?,&nbsp;?)"); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;myArray.length&nbsp;-&nbsp;1;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mySql.append(",&nbsp;(?,&nbsp;?)"); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;myStatement&nbsp;=&nbsp;myConnection.prepareStatement(mySql.toString()); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;myArray.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStatement.setString(i,&nbsp;myArray[i][1]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStatement.setString(i,&nbsp;myArray[i][2]); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;myStatement.executeUpdate();
随时随地看视频慕课网APP

相关分类

Java
我要回答