java.sql.PreparedStatement的setBoolean()方法
java.sql.PreparedStatement的setBoolean()方法
根据Oracle文档所述 -
https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setBoolean(int,%20boolean)
setBoolean(int parameterIndex,boolean x) 方法将指定的参数设置为给定的Java布尔值。当驱动程序将其发送到数据库时,它将其转换为SQL BIT或BOOLEAN值。
那么有没有办法知道值何时将被存储为SQL BIT?何时将其存储为BOOLEAN?
我正在使用Oracle数据库,我已经使用这种方法将值设置为true(Java Boolean),但在数据库中存储的值为1而不是Y。可能的原因是什么?
admin 更改状态以发布 2023年5月24日
T.J. Crowder的答案是正确的。
CREATE TABLE TEST_1 ( MEAL CHAR(1) CONSTRAINT MEAL_CONSTRAINT CHECK (MEAL IN ('Y', 'N')) );
输出:
Table: TEST_1 Column name: MEAL Data type: CHAR(1 BYTE) Nullable: Yes
Bean:
private boolean meal; public Boolean getMeal(){ return meal; } public void setMeal(Boolean meal){ return this.meal = meal; }
然后使用,
preparedStatement.setString(indexOfMealCol, getMeal() ? "Y" : "N");
注意:
- 提供除
Y
或N
之外的任何其他值,都会导致错误 - 接受空值
由于 Oracle 似乎没有 BIT 或 BOOLEAN 作为存储数据类型,所以不要使用 setBoolean
,它是为这些类型的列定义的。
相反,如果是 CHAR(1)
,则使用 setString
和您认为代表“true”和“false”的任何值。例如,从您的问题中,您可能希望使用 Y 和 N:
.setString(index, x ? "Y" : "N");