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