繁体   English   中英

Java中的MySQL:行1错误的列'AAL'的数据被截断

[英]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()) + ")";

..但如果某些价格不是有效的双倍价格,也会失败。

您的表和查询设计存在一些问题:

使用DATETIMEDATETIME类型存储日期和时间。 LONGBLOB并非为此目的。

截断的数据实际上是您要插入DOUBLE列中的价格。 如果getPrice()返回一个字符串,则需要检查小数点和千分号分隔符。 MySQL使用。 (点)默认为小数,而(逗号)为分隔符。 并且不要在查询中使用引号。

处理价格时,请考虑使用DECIMAL作为类型。 FLOATDOUBLE可能不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM