![](/img/trans.png)
[英]java.sql.SQLException: Data truncated for column 'MonthlyIncome' at row 1 error
[英]Mysql in Java: Data truncated for column 'AAL' at row 1 error
我正在尝试将ArrayLists中的数据插入Java中的mysql表中,但是仍然出现以下错误:java.sql.SQLException:第1行的'AAL'列的数据被截断了。
这是一些代码:
stmt = conn.createStatement();
sql = "CREATE TABLE IF NOT EXISTS stocks "
+ "(id INTEGER not NULL AUTO_INCREMENT, date LONGBLOB , " + "time LONGBLOB, "
+ " PRIMARY KEY ( id ))";
stmt.executeUpdate(sql);
System.out.println("Created table in given database...");
for (int i = 0; i < stockList.size(); i++) {
System.out.println(stockList.get(i).getName() + i);
sql = "ALTER TABLE stocks ADD " + stockList.get(i).getName() + " DOUBLE";
stmt.executeUpdate(sql);
}
for (int i = 0; i < stockList.size(); i++) {
System.out.println(i);
sql = "INSERT INTO stocks (id, date, time, " + stockList.get(i).getName() + ") VALUES (NULL, '" + stockList.get(i).getDate() +
"', '" + stockList.get(i).getTime() + "', '" + stockList.get(i).getPrice() + "')";
stmt.executeUpdate(sql);
}
任何帮助深表感谢。
您指出stockList.get(i).getPrice()
是一个字符串,并且您要在插入值中加上引号。 因此,您实际上是在尝试将字符串值插入DOUBLE列。 通常,MySQL会自动将字符串转换为双精度型,但是,我怀疑至少您的某些getPrice()值不是有效的双精度型。 您可以尝试以下方法:
... "', " + Double.parseDouble(stockList.get(i).getPrice()) + ")";
..但如果某些价格不是有效的双倍价格,也会失败。
您的表和查询设计存在一些问题:
使用DATE
, TIME
或DATETIME
类型存储日期和时间。 LONGBLOB
并非为此目的。
截断的数据实际上是您要插入DOUBLE
列中的价格。 如果getPrice()
返回一个字符串,则需要检查小数点和千分号分隔符。 MySQL使用。 (点)默认为小数,而(逗号)为分隔符。 并且不要在查询中使用引号。
处理价格时,请考虑使用DECIMAL
作为类型。 FLOAT
和DOUBLE
可能不正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.