2015-03-19 132 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的转换并且没有语言环境问题)。

相关问题