Java bigDecimal MySQL(准备语句)十进制丢失
我的问题是,当我将我的Java bigDecimal MySQL(准备语句)十进制丢失,java,mysql,prepared-statement,bigdecimal,Java,Mysql,Prepared Statement,Bigdecimal,我的问题是,当我将我的BigDecimal保存在数据库中时(例如:22.21),然后从数据库中取回BigDecimal,小数点就不存在了(例如:22) 我有以下疑问 String statement ="INSERT INTO " + TABLE_NAME + " (amount) VALUES( ? )"; PreparedStatement stmt = DataBase.getInstance().prepareStatement(statement); //set data stmt.s
BigDecimal
保存在数据库中时(例如:22.21),然后从数据库中取回BigDecimal
,小数点就不存在了(例如:22)
我有以下疑问
String statement ="INSERT INTO " + TABLE_NAME + " (amount) VALUES( ? )";
PreparedStatement stmt = DataBase.getInstance().prepareStatement(statement);
//set data
stmt.setBigDecimal(1, payment.getAmount());
// ...
然后我通过以下方式从数据库中获取金额:
String q = "SELECT * FROM " + TABLE_NAME + " WHERE project=" + project.getId();
//...
payment.setAmount(rs.getBigDecimal("amount")); // <-- decimal is lost
回答: MySQL类型应该是
DECIMAL(x,y)
而不是NUMERIC
(这解决了我的问题,谢谢安德烈)
rs.getInt()
返回一个int
。使用getBigDecimal()
或getDouble()
是的,对不起,我的代码/问题出错,已修复payment.getAmount()
它返回了什么?int或double?您应该进行两项检查,首先检查数据库中存储的值是否为22.11,如果是,则问题一定出在您的Payment
对象中,该对象具有int
/整数
或long
/long
键入字段以存储金额
。关于NUMERIC
数据库字段,我会尝试将其更改为DECIMAL
。创建表时是否可以显示金额字段声明?也许你应该把它声明为十进制(10,5)或其他形式。看见
amount NUMERIC NOT NULL