2017-07-13 9 views
0

で「AAL」は列に対して切り捨て私はJavaでMySQLのテーブルにのArrayListからデータを挿入しようとしています、しかし、私は次のエラーを取得しておく:ます。java.sql.SQLException:データのために切り捨てのMysql:データが行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); 
} 

すべてのヘルプははるかに高く評価されています列行1

で「AAL」ここでは、コードの一部です。

+0

は 'データがCOLUMN'のために切り捨て - あなたが挿入されているデータは、私はこの問題を解決するにはどうすればよいの列の最大長 – Abubakkar

+0

よりも大きい長さであることを意味します。 LONGBLOBはこれを解決できませんか? – Rpp

+0

ここで列「AAL」とは何ですか? – Blasanka

答えて

1

あなたはstockList.get(i).getPrice()が文字列であり、挿入物の値を引用符で囲んでいることを示しました。したがって、実際にはDOUBLE列に文字列値を挿入しようとしています。通常、MySQLは文字列をdouble型に自動的に変換しますが、私の疑問は少なくともあなたのgetPrice()値のいくつかは有効なdouble型ではないということです。あなたは代わりに、これを試すことができます。

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

..but価格の一部が有効倍でない場合、これは同様に失敗します。

使用DATETIME、または日付と時刻を格納するためのDATETIMEタイプ:

+0

その文字列ですが、10進形式の – Rpp

+0

それは問題です。私は私の答えを編集します。 – kaliatech

1

は、あなたのテーブルやクエリのデザインでいくつかの問題があります。 LONGBLOBはこのためのものではありません。

実際に切り捨てられたデータは、DOUBLE列に挿入しようとしている価格です。 getPrice()が文字列を返す場合は、10進数と16進数の区切り文字をチェックする必要があります。 MySQLが使用します。 (ポイント)を小数点として使用し、(カンマ)をデフォルト区切り記号として使用します。また、クエリでは引用符を使用しないでください。

価格を扱うときは、タイプとしてDECIMALを使用することを検討してください。 FLOATおよびDOUBLEが正確でない可能性があります。あなたは再びそれを読む場合は、例外メッセージが十分である