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)中,查询执行时没有任何错误。
我刚刚发现我是个白痴。我可以留下空白字段,所以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
这是一个浮点数,当错误出现时,我把它改为double(错误仍然在这里) 问题是,这不是一个需要填充的字段,我想它留空,如果可能的话(似乎它不是目前为止) – Fusyoo
@Fusyoo留空不意味着空字符串“”你可以根本没有在你的SQL字符串中提及这一列字符串 –
@Fusyoo数据库的float或double类型不能确定一个空字符串,这将是一个错误 –
,是的,这就是为什么手工编写INSERT语句是一个可怕的想法 - 用HITELKERET的一个PreparedStatement –
列类型是什么? –
它是一个浮点数(32) – Fusyoo