Java:MySQL数据截断:不正确的double值:''用于列

问题描述:

由于我们正在处理大量数据,因此正在生成查询。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

我刚刚发现我是个白痴。我可以留下空白字段,所以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; 

根据您的错误提示和我的经验,当拼接查询字符串时,您没有为HITELKERET列获得正确的数据类型。

看起来好像是HITELKERET字段应该是float类型的数据库表。

请确保HITELKERET列不为空字符串,至少是默认0

+0

这是一个浮点数,当错误出现时,我把它改为double(错误仍然在这里) 问题是,这不是一个需要填充的字段,我想它留空,如果可能的话(似乎它不是目前为止) – Fusyoo

+0

@Fusyoo留空不意味着空字符串“”你可以根本没有在你的SQL字符串中提及这一列字符串 –

+0

@Fusyoo数据库的float或double类型不能确定一个空字符串,这将是一个错误 –