java.sql.PreparedStatement的setBoolean()方法

18 浏览
0 Comments

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日
0
0 Comments

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");

注意:

  • 提供除YN之外的任何其他值,都会导致错误
  • 接受空值
0
0 Comments

由于 Oracle 似乎没有 BIT 或 BOOLEAN 作为存储数据类型,所以不要使用 setBoolean,它是为这些类型的列定义的。

相反,如果是 CHAR(1),则使用 setString 和您认为代表“true”和“false”的任何值。例如,从您的问题中,您可能希望使用 Y 和 N:

.setString(index, x ? "Y" : "N");

0