3

我是 Java 和 Oracle 之间连接的新手,我正在设计一个登录页面。

我正在尝试从 JAVA 调用 Oracle 函数。FUNCT_PERSON假设使用 2 个 IN 参数调用 Oracle 函数:usernamepassword返回用户 id,即NUMBER.

FUNCT_PERSON函数内部,我们使用一个SELECT语句,如果找到则返回用户 ID 号,否则返回 0。

这是我的代码:

String sql = "{ ? = call FUNCT_PERSON(?,?) }";
CallableStatement statement = connection.prepareCall(sql);
statement.setString(2,username);
statement.setString(3,password);
statement.registerOutParameter(1, java.sql.Types.INTEGER);  

Boolean check = statement.execute();   

if (!check) {
 //proceed to another page
} else {
 //Go back to the login page
}

我不知道我做的对不对,尤其是那Boolean check = statement.execute();行,因为我真的不知道支票是干什么用的。。

如果函数返回一个用户 ID,这意味着它存在于数据库中,我将进入另一个页面。如果没有,那么它将重定向到登录页面。

4

2 回答 2

9

您只需要恢复操作的结果并使用它来验证要执行的操作:

String sql = "{ ? = call FUNCT_PERSON(?,?) }";
CallableStatement statement = connection.prepareCall(sql);
statement.setString(2,username);
statement.setString(3,password);
statement.registerOutParameter(1, java.sql.Types.INTEGER);  

statement.execute();   
//this is the main line
long id = statement.getLong(1);
if (id > 0) {
    //proceed to another page
} else {
    //Go back to the login page
}

基于本教程

于 2013-02-27T19:42:56.280 回答
2

来自JAVA 文档

execute 方法返回一个布尔值来指示第一个结果的形式。您必须调用方法 getResultSet 或 getUpdateCount 来检索结果;您必须调用 getMoreResults 才能移动到任何后续结果。

返回:如果第一个结果是 ResultSet 对象,则为 true;如果第一个结果是更新计数或没有结果,则返回 false

所以你的检查是错误的。execute没有说操作是否成功。

于 2013-02-27T19:39:33.373 回答