![](/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.