当前位置: 首页 > 知识库问答 >
问题:

Java 中的 Mysql:第 1 行处列“AAL”的数据被截断错误

赵智
2023-03-14

我试图插入数据从ArrayList到一个mysql表Java,但是我一直得到以下错误:java.sql.SQLException:数据截断列'AAL'在第1行。

以下是一些代码:

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); 
}

任何帮助都非常感谢。

共有2个答案

薛博艺
2023-03-14

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

使用DATETIMEDATETIME类型来存储日期和时间。LONGBLOB不适用于此。

被截断的数据实际上是您试图插入到DOUBLE列中的价格。如果getPrice()返回字符串,则需要检查小数和千位分隔符。默认情况下,MySQL使用.(point)作为小数点,使用,(逗号)作为千位分隔符。并且不要在查询中使用引号。

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

牟恺
2023-03-14

您指出stockList.get(i)。getPrice()是一个字符串,您将在insert中的值周围加上引号。因此,您正在有效地尝试将字符串值插入DOUBLE列。通常,MySQL会自动将字符串转换为double,但我怀疑至少有一些getPrice()值不是有效的double。您可以尝试这样做:

... "', " + Double.parseDouble(stockList.get(i).getPrice()) + ")";

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

 类似资料:
  • 在我的javaweb应用程序中,我将一些记录插入MySql数据库。我有一个列名“value”,其字段类型为float。当我将以下值76.8653846153846插入到数据库中时,它给出了在第1行为列“value”截断数据的异常。我将字段类型更改为Double,但消息相同。知道吗? 领域描述:

  • 在我的项目中,我使用了txtAdvance的关键事件 在最后一行运行之后,我添加了一个保存按钮来保存这些数据。下面给出了查询。 我正在截断第1行的列“advance”的MySql数据。advance的数据类型为Double。但我找不到办法来计算长度 (例如 列名:iid,数据类型:Int 我正在使用 MySQL 查询浏览器 。问题是当我向txt添加0值时,我遇到了这个错误。

  • 您好,我正在尝试向mysql列添加数据,但在输入了一些数据后,它抛出了主题提到的错误

  • 问题内容: 我试图将照片插入到MySQL表的BLOB列中,但出现异常: 这是JDBC: 我该如何解决这个问题? 问题答案: 您试图插入的数据大于列允许的数据。 根据需要使用以下数据类型 使用以避免此异常。

  • 问题内容: 在更改MySql列的数据类型以存储Twilio调用 ID(34个字符字符串)之后,我尝试使用以下方法手动更改该列中的数据: 但是,我看到一个错误,因为正确修改了列的数据类型,所以没有意义吗? 问题答案: 您的问题是,目前您的栏定义为应在何时。 要解决此问题,只需发出此命令即可将列的长度从1更改为34 这是 SQLFiddle 演示

  • 我有一个代表. csv文件结构的自定义类,它稍后会读入该类的arrayList。它有以下标签: 这是简化的. csv文件: 当我将这些读入arrayList并将各个状态放在consolse上只是为了检查时,它会正确显示(IN_STOCK,OUT_OF_STOCK)。但是,当我尝试将其插入数据库时,它会被截断: java.sql.SQLException:第1行的列“Status”的数据被截断 以下