我对以下方法有疑问。该方法生成有效的查询,但无法插入表监视器。
方法:
public void upLoadData(String table, String[] dbCols,List<LinkedHashMap<String,String>> values){
String wq = "INSERT INTO "+table+" (";
for (int j = 0; j < dbCols.length; j++) {
wq+=dbCols[j]+",";
}
wq = wq.replaceAll(",$", ""); //Remove comma from the end of line.
wq+=") VALUES";
for (LinkedHashMap<String, String> val : values) {
wq+="(";
for (int i = 0; i < dbCols.length; i++) {
wq+="'"+val.get(dbCols[i])+"',";
}
wq = wq.replaceAll(",$","");
wq+="),";
}
wq = wq.replaceAll(",$", ";");
System.out.println(wq);
myDB.DBInsert(wq, MyDBPool.getConnections());
}
以及插入方法:
public void DBInsert(String query, Connection conn){
Statement stm;
try{
stm = conn.createStatement(); // conn from db connection pool
stm.executeUpdate(query);
}catch(SQLException ex){ex.getLocalizedMessage();}
}
输出为:
INSERT INTO monitor (id,arr_date,company,disp_size,disp_type,producer,prod_type,color,cond_cat,comments)
VALUES('H13/2:3445','2015-11-15','Valami','jó','21','Dell','T32','fekete','B','sadsadasdasd'),
('H14:/3:5567','2015-11-15','Nincs','TFT','19','HP','B32','piros','A','sadsadasd'),
('H13/8:3321','2015-11-15','CCCP','CRT','19','nincs','T24','fehér','D','sadsadsad');
手动(PhPMyAdmin)插入没有问题。 我使用 JDBC、Hikari dbpool、XAMPP v3.2.1
任何帮助将不胜感激。谢谢!
最佳答案
您没有提交
,也没有关闭
您的Statement
(或Connection
)。您可以使用 try-with-resources
close并添加一个提交
,例如
public void DBInsert(String query, Connection conn) {
try (Statement stm = conn.createStatement()){
stm.executeUpdate(query);
conn.commit();
} catch (SQLException ex) {
ex.getLocalizedMessage();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
此外,我强烈建议您使用 PreparedStatement
和?
占位符(或绑定(bind)参数)出于性能和安全原因而不是将插入构建为 String
。
关于java - 从java插入查询到mysql数据库不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33717466/