2017-07-12 111 views
0

由於我們正在處理大量數據,因此正在生成查詢。Java:MySQL數據截斷:不正確的double值:''用於列

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

由該方法生成的查詢字符串是:

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'; 

的問題是,當

 ... 
     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; 
     ... 

此方法當我們運行由它生成的查詢生成此錯誤消息我從Java控制檯複製該字符串,並將其粘貼到MySQL編輯器(我使用SQLYOG)中,查詢執行時沒有任何錯誤。

+0

,是的,這就是爲什麼手工編寫INSERT語句是一個可怕的想法 - 用HITELKERET的一個PreparedStatement –

+0

列類型是什麼? –

+0

它是一個浮點數(32) – Fusyoo

回答

0

我剛剛發現我是個白癡。我可以留下空白字段,所以SQL不會嘗試從''中讀取一個double。 我改變了我的方法是這樣的:

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

根據您的錯誤提示和我的經驗,當拼接查詢字符串時,您沒有爲HITELKERET列獲得正確的數據類型。

看起來好像是HITELKERET字段應該是float類型的數據庫表。

請確保HITELKERET列不爲空字符串,至少是默認0

+0

這是一個浮點數,當錯誤出現時,我把它改爲double(錯誤仍然在這裏) 問題是,這不是一個需要填充的字段,我想它留空,如果可能的話(似乎它不是目前爲止) – Fusyoo

+0

@Fusyoo留空不意味着空字符串「」你可以根本沒有在你的SQL字符串中提及這一列字符串 –

+0

@Fusyoo數據庫的float或double類型不能確定一個空字符串,這將是一個錯誤 –

相關問題