1)我在java端使用这个setBoolean()发送了什么,Oracle得到了什么?
来自Java docs:
将指定参数设置为给定的Java布尔值.驱动程序在将其发送到数据库时将其转换为SQL BIT值.
因此,布尔值将转换为BIT值.
2)它之前是什么样的布尔类型,为什么这与setBoolean()不兼容?“
如上所述,它将其转换为BIT值,因此它期待同样的事情.以前,oracle也存在一个布尔变量.但正如你所说,在尝试了几件事之后,我只是简单地将Oracle中的类型从Boolean更改为Int,将java代码保留为“setBoolean(3,true)”,一切正常.原因是,oracle没有布尔值变量了.为什么?阅读this以深入讨论该问题.
3)在提高速度时,我应该使用Oracle类型int和java setBoolean(),还是其他组合,如Oracle Varchar和setString()?
我会说varchar和setString().原因,setString()方法converts将它变成varchar.因此,与setBoolean()和int相比,您节省了时间,从Boolean到BIT再到int.
编辑
只需从上述链接之一复制粘贴的内容,以便更清楚地澄清问题:
你好汤姆,
我有一个关于布尔数据类型的问题.
以下是我们的客户编写的SP,我们需要将其与我们的应用程序集成.
PROCEDURE sp_xxxx_map (
ic_opt_number IN VARCHAR2,
in_cast_number IN NUMBER,
in_tyre_amount IN NUMBER,
ob_is_valid OUT BOOLEAN,
ob_is_obgr_obgt_valid OUT BOOLEAN,
—————少数参数….
在集成上面的内容时,除了boolean OUT参数外,一切都很好.
我想(如果我错了,请纠正我)java(JDBC类)中没有SQL数据类型来捕获
“ob_is_valid”,“ob_is_obgr_obgt_valid”参数.
怎么办这个问题呢.
一个想法是:
我可以编写另一个SP(比如SP1),它将调用上面的SP并将布尔类型转换为
CHAR为’Y’表示true,’N’表示false.
最后我让应用程序调用新创建的SP1.
关注2003年2月5日 – 上午9点中部时区:
准备并执行:
declare
b1 boolean;
b2 boolean;
n1 number := 0;
n2 number := 0;
begin
sp_xxxx_map( ?, ?, ?, b1, b2 );
if (b1) then n1 := 1; end if;
if (b2) then n2 := 1; end if;
? := n1;
? := n2;
end;
来自jdbc应用程序.