第一次使用Oracle,正常使用SQLServer,遇到了一个奇怪的问题。我正在为这个问题撕毁我的头发,并尝试随机的东西,并且碰巧起作用了。
所以最初,我只有两个参数,一切正常。然后我希望添加一个布尔值以允许在我的存储过程中使用多个路径。我在我的数据库环境中对其进行了测试,没有错误,我得到了我期望的数据。然后我在我的 java 代码中添加几行来提取这些数据,突然我得到“ wrong number or types of parameters
”错误。
在尝试了几件事之后,我只是将 Oracle 中的类型从 Boolean 更改为 Int,让 java 代码仍然为“ setBoolean(3, true)
”,一切正常。
所以我的问题是:
1) 我在 java 端用这个 setBoolean() 发送什么,Oracle 得到了什么?
2) 之前它是 " 类型时期望什么Boolean
,为什么这与 " 不兼容setBoolean()
?"
3) 为了提高速度,我应该将 Oracle 类型 int 与 java setBoolean() 或其他组合(如 Oracle Varchar 和 setString())一起使用吗?
爪哇:
String jobquery = "{call PKG_TEST.GET_PLAN_DATA(?,?,?)}";
CallableStatement callStmt = con.prepareCall(jobquery);
callStmt.setString(1,"15105");
callStmt.setString(2, "");
callStmt.setBoolean(3, true);
Oracle SP(以前):
PROCEDURE GET_PLAN_DATA(
NAME_N_IN IN VARCHAR2,
TYPE_C_IN IN VARCHAR2 DEFAULT NULL,
ONLY_RESTRICTIONS_IN IN BOOLEAN DEFAULT FALSE)
甲骨文改为:
PROCEDURE GET_PLAN_DATA(
NAME_N_IN IN VARCHAR2,
TYPE_C_IN IN VARCHAR2 DEFAULT NULL,
ONLY_RESTRICTIONS_IN IN INT DEFAULT 0)