2016-03-26 21 views
1

Bu hatayı jdbc sürücümden aldım. Nedenini bilmiyorum tho.Java - 'alan listesindeki bilinmeyen sütun' jdbc hatası

İşte karşılık gelen kod:

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

"değerler" ve "cols" JTable alınan verileri içeren Dizi Listeleri bulunmaktadır. cols kolon adlarıdır ve değerler hücre değerleridir. Sysout için

çıkışı:

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

hatası: PreaparedStatement amaçlanmıştır değildir nasıl

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

değerleri için tek ters çevrilmiş virgüllerde bulabilirsiniz. Bir yan notu kullanmak için 'setString()' vb yöntemleri – silentprogrammer

+0

değerleri ayarlamak için, Ama yine de, hata aldım. – david20002062

+0

sorgu çıktısını gösterir ve hata – silentprogrammer

cevap

2

kullanılır. Bir PreparedStatement kullandığınızda, "set" yöntemlerinden birini kullanarak değerleri belirtebilirsiniz. İşte

bir örnek:

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

Sen sütunun veri türü (setInt(...), setDate(...), vs.) göre uygun "set" yöntemi kullanmalısınız. Daha fazla ayrıntıyı here

+0

Çok teşekkür ederim. Şuan çalışıyor. :) – david20002062

+0

@ david20002062 Yardım edebileceğime sevindim, iyi şanslar. – Titus

İlgili konular