2016-03-26 12 views
1

Ich habe diesen Fehler von meinem JDBC-Treiber. Ich weiß nicht warum, tho.Java - Unbekannte Spalte in 'Feldliste' jdbc Fehler

Hier ist der entsprechende Code:

try { 
    String colNames = " "; 
    for (int i=0; i<cols.size(); i++) { 
     if (i == cols.size()-1) { 
      colNames += cols.get(i); 
     } else if (i<cols.size()) { 
      colNames += cols.get(i)+", "; 
     }    
    }  
    String colValues = " "; 
    for (int i=0; i<values.size(); i++) { 
     if (i == values.size()-1) { 
      colValues += values.get(i); 
     } else if (i<values.size()) { 
      colValues += values.get(i) + ", "; 
     }  
    } 
    System.out.println(
     "INSERT INTO `" + tableName + "` (" + colNames + ") VALUES (" + colValues + ") " 
    ); 
    //System.out.println(kerdojel); 

    PreparedStatement pst = connHandler.conn.prepareStatement 
     ("INSERT INTO `" + tableName + "` (" + colNames + ") VALUES (" + colValues + ") "); 
    pst.executeUpdate(); 
    pst.close(); 
} 

"Werte" und "cols" sind Arraylisten, die die Daten aus der JTable enthält. Spalten sind die Spaltennamen und Werte sind die Zellenwerte.

Der Ausgang für die Sysout:

INSERT INTO `TableOne` (nev, kor, lakhely) VALUES (asd, 1, asd) 

Der Fehler:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'asd' in 'field list' 
+0

Verwenden Sie einzelne Anführungszeichen für Werte. Auf einer Seitennotiz verwenden 'setString()' etc Methoden, um die Werte – silentprogrammer

+0

Danke, aber immer noch, habe ich den Fehler. – david20002062

+0

zeigen Sie die Ausgabe der Abfrage und den Fehler – silentprogrammer

Antwort

2

, das nicht, wie die PreaparedStatement verwendet werden soll zu. Wenn Sie eine PreparedStatement verwenden, können Sie die Werte angeben, indem Sie eine der Methoden "set" verwenden. Hier

ein Beispiel:

String colNames = " "; 
String colValues = " "; 
for (int i=0; i<cols.size(); i++) { 
    if(i!=0){ 
     colNames += ", "; 
     colValues += ", "; 
    } 
    colNames += cols.get(i); 
    colValues += "?";    
}  

try (PreparedStatement pst = connHandler.conn.prepareStatement("INSERT INTO `" + tableName + "` (" + colNames + ") VALUES (" + colValues + ") ");){ 

    for (int i = 0; i < values.size(); i++) { 
     pst.setString(i+1,values.get(i));  
    } 

    pst.executeUpdate(); 
} 

Sie sollten die entsprechenden "set" Methode verwenden, basierend auf den Datentyp der Spalte (setInt(...), setDate(...), etc.). Sie können weitere Details finden here

+0

Vielen Dank. Es funktioniert jetzt. :) – david20002062

+0

@ david20002062 Ich bin froh, dass ich helfen konnte, viel Glück. – Titus

Verwandte Themen