2016-04-29 14 views
-1

Ich versuche, meine HashMap in eine Access-Datenbank einzufügen, aber ich bekomme immer Fehler. Hier ist mein Code:Wie Sie eine HashMap in eine Datenbank in Java einfügen

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(); 
            } 
           } 
         } 

und hier ist der Fehler:

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

Ich bin sicher, es ist etwas mit der Aussage String stg = "INSERT INTO Impedance2 "+prep1+" VALUES('"+entry.getValue()+"')"; zu tun, aber ich habe gespielt mit ihm herum und es immer noch Reisen oben.

dbColNames ist ein Array von bestehenden Datenbankspaltennamen, damit ich gegen sie überprüfen, bevor die HashMap

Antwort

1

Ihr Beispielcode versucht, das Hinzufügen folgendes zu tun: Für jeden Eintrag in der Hash-Karte, wenn ist Ist eine Tabellenspalte mit dem Namen Schlüsselname verfügbar, versuchen Sie, diesen Wert in die Datenbank einzufügen.

Ihre generierte INSERT-Anweisung berücksichtigt jedoch nicht die anderen Spalten in Ihrer Tabelle. Sie würden so etwas wie die folgenden Voraussetzungen:

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

überhaupt diese Funktion zu erhalten (es sei denn, Sie für Ihre Spalten definiert entsprechenden Standardwerte haben), in dem Sie den hashmap Wert auf den entsprechenden Index in der Anweisung platzieren und füllen alle anderen Spalten mit NULL (oder einem entsprechenden Standardwert; NULL-Werte sind möglicherweise nicht zulässig).

Wenn Ihr hashmap ein einzelner Datensatz darstellen soll, müssen Sie alle Datum in einer einzigen INSERT-Anweisung kombinieren:

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

ich für die Überprüfung weggelassen, wenn Werte sind überhaupt vorhanden, zusätzlich ein mit StringBuffer wäre effizienter. Wenn Sie dies mehr als einmal tun, sollten Sie stattdessen eine vorbereitete Anweisung verwenden.

Verwandte Themen