2016-04-29 205 views
-1

我想將我的HashMap插入到Access數據庫中,但是我不斷收到錯誤。 這裏是我的代碼:如何在java中插入HashMap到數據庫中

for (Entry<String, String> entry : mapImpedanceAll.entrySet()) { 
          prep1 = entry.getKey().replaceAll("\\s", "_"); 
          prep1=prep1.replace(":",""); 
           prep1=prep1.replace("<","LessThan"); 
           prep1=prep1.replaceAll("\\." ,""); 
           prep1=prep1.replaceAll("\\(s\\)" ,""); 
           prep1=prep1.replaceAll(",$" ,""); 
           prep1=prep1.replaceAll("%" ,""); 
           prep1=prep1.replace("-" ,"_"); 
           prep1=prep1.replace("_" ,""); 
           if(dbColNames.contains(prep1)){ 

            try { 
             Statement qu = null; 
             qu =conn.createStatement(); 
             String stg = "INSERT INTO Impedance2 "+prep1+" VALUES('"+entry.getValue()+"')"; 
              qu.execute(stg); 
            } catch (Exception e) { 
             e.printStackTrace(); 
            } 
           } 
         } 

,這裏是錯誤:

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.4 row column count mismatch 

我敢肯定它的東西與聲明String stg = "INSERT INTO Impedance2 "+prep1+" VALUES('"+entry.getValue()+"')";做,但我已經與它玩耍了,它仍然車次向上。

dbColNames是現有的數據庫列名的數組,所以我可以檢查對他們添加的HashMap

回答

1

你的示例代碼嘗試執行以下操作前: 對於散列圖中的每個條目,如果有一個名稱與鍵名相同的表列,你試着將這個值插入到數據庫中。

但是,您生成的INSERT語句不考慮表中的其他列。在這裏你將HashMap中值在適當的指數的發言,並填補了

INSERT INTO table (col1, col2, col3, col4) VALUES (NULL, value, NULL, NULL) 

得到這個工作在所有的(除非你有你的列中定義適當的默認值),:你需要像下面這樣所有其他具有NULL的列(或者適當的默認值;甚至可能不允許NULL值)。

如果你的HashMap應代表一個單個數據集,你需要所有日期組合成一個單一的INSERT語句:

string sql = "INSERT INTO table (col1, col2, col3, col4) VALUES (" 
      + hashmap.get("col1") + ", " + hashmap.get("col2") + ", " 
      + hashmap.get("col3") + ", " + hashmap.get("col4") + ");"; 

我離開了檢查,如果值就可以在所有的,另外,使用StringBuffer會更有效率。如果您多次執行此操作,請考慮使用準備好的語句。

相關問題