2017-07-12 9 views
0

Da wir mit einer Menge Daten arbeiten, generiert eine Methode die Abfrage.Java: Abschneiden von MySQL-Daten: Falscher doppelter Wert: '' für Spalte

 ... 
     switch(operation) { 
     case "insert":     
      query +="INSERT INTO " + table + " SET "; 
      for(int i=0; i<columns.size(); i++) { 
       query += "`"+columns.get(i)+"`='"+values.get(i)+"',"; 
      } 
      query=query.substring(0, query.length()-1); //to remove the last " , " from the string 
      query += ";"; 
     break; 
     ... 

Diese Methode generiert diese Fehlermeldung, wenn wir die Abfrage generiert, indem es ausgeführt:

Data truncation: Incorrect double value: '' for column 'HITELKERET' at row 1 

Der Query-String durch das Verfahren erzeugt wird:

INSERT INTO szallvev 

SET `NEV2`='',`BANKSZAMLA`='   -   -   ', 
    `BANK1`='', 
    `ORSZAG`='', 
    `BANK2`='', 
    `IBAN`='', 
    `SWIFT`='', 
    `IRSZAM`='', 
    `VAROS`='', 
    `UTCA`='', 
    `KTJELLEG`='0', 
    `HAZSZAM`='', 
    `EPULET`='', 
    `LEPCSOHAZ`='', 
    `EMELET`='', 
    `AJTO`='', 
    `ADOSZAM`='', 
    `KOZADOSZAM`='', 
    `UGYINTEZO`='', 
    `EMAIL`='', 
    `TELEFON`='', 
    `MOBIL`='', 
    `INTERNET`='', 
    `FAX`='', 
    `FIZMOD`='0', 
    `CSOPADO`='', 
    `MUNKASZAM`='', 
    `HITELKERET`='', 
    `DEVARSZINT`='0', 
    `KEDV1`='0', 
    `NAPOK`='', 
    `ELADO`='0', 
    `UZLETKOTO`='', 
    `AZONOSITO`='test', 
    `NEV1`='test'; 

Das Problem ist, wenn Ich kopiere diese Zeichenfolge von der Java-Konsole und füge sie in einen MySQL-Editor ein (ich benutze SQLYOG), die Abfrage wird ohne Fehler ausgeführt.

+0

und ja, das ist, warum hand Crafting Einfügeanweisungen eine schreckliche Idee ist - ist ein PreparedStatement –

+0

Spaltentyp von HITELKERET verwenden, was? –

+0

Es ist ein float (32) – Fusyoo

Antwort

0

ich gerade herausgefunden, dass ich ein kompletter Idiot bin. Ich kann einfach die leeren Felder verlassen, so dass die SQL nicht versuchen wird, ein Doppel von '' zu lesen. ich meine Methode geändert wie folgt aussehen:

switch(operation) { 
     case "insert":     
      query +="INSERT INTO " + table + " SET "; 
      for(int i=0; i<columns.size(); i++) { 
       val = values.get(i); 
       if(val.length()>0) { // notice the if(), when the field has no value, it wont be put into the query string. 
        col = columns.get(i); 
        query+="`"+col+"` = '"+val+"',"; 
        if(i%3==0) query+="\n"; 
       } 

      } 
      query=query.substring(0, query.length()-1); 
      query += ";"; 
     break; 
0

Basierend auf Ihren Fehlertipps und meiner Erfahrung, haben Sie nicht den richtigen Datentyp für die Spalte HITELKERET erhalten, als Sie die Abfragezeichenfolge gespleißt haben.

Es scheint wie Das HITELKERET Feld sollte Float-Typ in Ihrer Datenbanktabelle sein.

Bitte stellen Sie sicher, HITELKERET Spalte keine leere Zeichenfolge ist, zumindest die Standard 0

+0

Es war ein Schwimmer, als der Fehler kam, dann änderte ich es in Doppel (der Fehler ist immer noch hier) Das Problem ist, dass dies nicht ein Feld ist, das ausgefüllt werden muss, und ich will es leer zu bleiben, wenn möglich (scheint, als ob es nicht so weit ist) – Fusyoo

+0

@Fusyoo bleiben leer bedeutet nicht leer String "" .Sie können diese Spalte in Ihrem sql String einfach nicht –

+0

@Fusyoo Die Float-oder Double-Typ der Datenbank kann nicht Identifizieren Sie eine leere Zeichenfolge, es wird ein Fehler sein –