簡體   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