Java:MySQL 数据截断:双精度值不正确:“”用于列

Java: MySQL Data truncation: Incorrect double value: '' for column

由于我们正在处理大量数据,因此一种方法正在生成查询。

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

当我们 运行 它生成的查询时,此方法会生成此错误消息:

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

问题是,当我从 Java 控制台复制此字符串并将其粘贴到 MySQL 编辑器(我使用 SQLYOG)时,查询执行时没有任何错误。

根据你的错误提示和我的经验,你在拼接查询字符串的时候没有得到正确的HITELKERET列的数据类型。

您的数据库中的 HITELKERET 字段似乎应该是 float 类型 table.

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

我才发现我是个彻头彻尾的白痴。我可以只保留空白字段,这样 SQL 就不会尝试从 '' 中读取双精度值。 我将方法更改为如下所示:

    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;