簡體   English   中英

從Java向MySQL數據庫插入查詢無法正常工作

[英]Insert query to mysql database from java not working

我對以下方法有疑問。 該方法生成一個有效的查詢,但是它不能插入表監視器。

方法:

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

任何幫助將不勝感激。 謝謝!

您沒有commit ,也沒有close您的Statement (或Connection )。 您可以使用try-with-resources關閉並添加如下commit

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? 出於性能安全原因的 占位符 (或綁定參數 ),而不是將插入內容構建為String

感謝您的幫助和建議,最后我找到了問題,我的舊插入方法可以正常工作(但是我按照Elliott Frisch的建議進行了更新和引用),問題是我只交換了兩個具有不同類型的列,因此PhPMyAdmin可以處理錯誤(將0賦予不匹配值),但是Java JDBC無法解析,因此請刪除插入任務。

再一次,非常感謝! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM