Я использую следующее PreparedStatement для обновления SQL Express базы данных с Java:
PreparedStatement update_product_statement = connection.prepareStatement("UPDATE products set display_name = ?, price = ?, color = ?, size = ? WHERE product_id= ? ;");
update_product_statement.setString(1, product.getDisplayName());
BigDecimal price= new BigDecimal(product.getPrice());
update_product_statement.setBigDecimal(2, price);
if(product instanceof MatrixItem) {
update_product_statement.setString(3,((MatrixItem) product).getColor());
update_product_statement.setString(4,((MatrixItem) product).getSize());
} else {
update_product_statement.setString(3, "");
update_product_statement.setString(4, "");
}
update_product_statement.setInt(5, product.getId());
update_product_statement.executeUpdate();
Я получаю сообщение об ошибке, которое говорит com.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 2.
Я думаю, что это происходит, потому что «цена» в таблице SQL установлена на SMALLMONEY, а переменная «цена» в коде Java - BigDecimal. Читая документы Microsoft, похоже, что так оно и должно быть, но все равно не работает.
Вот документ, на который я ссылаюсь: https://docs.microsoft.com/en-us/sql/connect/jdbc/using-basic-data-types?view=sql-server-ver15
В нем говорится, что SMALLMONEY является BigDecimal в Java. Также стоит отметить, когда я пытаюсь использовать update_product_statement. setDecimal (2, цена) ; он переключает его на BigDecimal (2, цена) в затмении.