2015-03-19 108 views
0

我有一個Double數據類型列的MySQL表,當我插入一個Java Double中包含的值時,我總是得到一個截斷錯誤。Mysql DOUBLE列數據使用Java Double截斷異常Double

MRZ 19,2015年上午11點26分〇〇秒databaseimport.MyImport的executeQuery SCHWERWIEGEND:空值java.sql.SQLException:數據截斷 '分享' 柱1行

我試圖改變列的DOUBLE PRECISION(30,30)似乎是DOUBLE的最大值,但錯誤依然存在,因此精度更高。

下面示例代碼段:

Double share = (Double) shareRow.get("share"); 

sql = ("INSERT INTO `SHARE_VALUES` (`ID`, `SHARE`)" + 
     "VALUES (NULL, "+share+");"); 
try 
     { 
      // Create a Preparedstatement 
      PreparedStatement ps; 
      ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
      ps.execute(); 
      ResultSet generatedKeys = ps.getGeneratedKeys(); 

     } 
     catch (SQLException ex) 
     { 
      java.util.logging.Logger.getLogger(Shares.class 
        .getName()).log(Level.SEVERE, null, ex); 

      return -1; 
     } 
+1

請提供一個插入/更新語句的Java代碼的剪切.... – Marcx 2015-03-19 10:53:10

+0

SHARE列允許什麼大小? – ConMan 2015-03-19 13:01:15

+0

期望'DOUBLE(30,15)'可以用於說'1.5'。在MySQL控制檯,工作臺,Toad或IDE SQL控制檯中嘗試一下。我認爲問題是整數數字的空間,即尾數。 – 2015-03-19 13:14:03

回答

0

儘量不要做這樣的:

sql = String.format(Locale.US, "INSERT INTO `SHARE_VALUES` (`ID`, `SHARE`)" + 
     "VALUES (NULL, %.3f);", share); 

當連接字符串的Java可能會使用您的語言環境轉向,例如6.80到 「6,80」 < - 中逗號(',')符號對MySQL有不同的含義,這可能會導致很多問題。

如果您打算使用事先準備好的聲明,那麼這將是更喜歡它:

NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());  
Double share = nf.parse(shareRow.get("share")).doubleValue(); 

sql = ("INSERT INTO `SHARE_VALUES` (`ID`, `SHARE`)" + 
     "VALUES (NULL, ?);"); 
try 
{ 
    // Create a Preparedstatement 
    PreparedStatement ps; 
    ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
    ps.setDouble(1, share); 
    ps.execute(); 
    ResultSet generatedKeys = ps.getGeneratedKeys(); 

} 
catch (SQLException ex) 
{ 
    java.util.logging.Logger.getLogger(Shares.class 
      .getName()).log(Level.SEVERE, null, ex); 

    return -1; 
} 

注意查詢字符串帶有「?」標誌,這些表示參數。當您撥打:

ps.setDouble(1, share); 

,將指定,參數值1爲share,因此第一個「?」符號被替換爲值share(完全知道java到mysql的轉換並且沒有語言環境問題)。

相關問題