java.sql.PreparedStatement的setBoolean()方法

java.sql.PreparedStatement的setBoolean()方法,java,sql,oracle,Java,Sql,Oracle,根据oracle文档- setBoolean(内部参数索引,布尔值x) 方法将指定的参数设置为给定的Java布尔值。驱动程序将其发送到数据库时,会将其转换为SQL位或布尔值 这里有没有办法知道什么时候该值将被存储为SQL位?什么时候它会存储为布尔值 我使用的是oracle数据库,我使用这种方法将值传递为true(Java布尔值),并且存储在数据库中的值是1而不是Y。原因可能是什么?既然出现oracle,就不要使用setBoolean。它被定义为用于这些类型的列 相反,如果它是CHAR(1),则

根据oracle文档-

setBoolean(内部参数索引,布尔值x)

方法将指定的参数设置为给定的Java布尔值。驱动程序将其发送到数据库时,会将其转换为SQL位或布尔值

这里有没有办法知道什么时候该值将被存储为SQL位?什么时候它会存储为布尔值

我使用的是oracle数据库,我使用这种方法将值传递为true(Java布尔值),并且存储在数据库中的值是1而不是Y。原因可能是什么?

既然出现oracle,就不要使用
setBoolean
。它被定义为用于这些类型的列

相反,如果它是
CHAR(1)
,则使用
setString
以及对您来说表示“真”和“假”的任何值。例如,从您的问题中,您可能期望Y和N:

.setString(index, x ? "Y" : "N");
因为它显示为Oracle,所以不要使用
setBoolean
。它被定义为用于这些类型的列

相反,如果它是
CHAR(1)
,则使用
setString
以及对您来说表示“真”和“假”的任何值。例如,从您的问题中,您可能期望Y和N:

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

我假设实际类型取决于相关DB表中列的类型。您是如何定义该列的?因为它将true存储为单个位。这是
1
。您能定义您的表吗?也许你有点像那个列。简单地说,Oracle没有布尔类型。常用的方法是声明一个小数字字段,并对布尔值使用
1
0
。这可能就是驱动程序为您所做的-将字段设置为
1
。它不知道你认为
Y
true
N
false
。我想这是由其他地方的不同过程插入的信息。可能是T.J.Crowder在回答中建议的方式。我假设实际类型取决于相关DB表中列的类型。您是如何定义该列的?因为它将true存储为单个位。这是
1
。您能定义您的表吗?也许你有点像那个列。简单地说,Oracle没有布尔类型。常用的方法是声明一个小数字字段,并对布尔值使用
1
0
。这可能就是驱动程序为您所做的-将字段设置为
1
。它不知道你认为
Y
true
N
false
。我想这是由其他地方的不同过程插入的信息。可能是T.J.克劳德在回答中建议的方式。谢谢@T.J.克劳德谢谢@T.J.克劳德