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