我是Java和Oracle之间的连接新手,我正在设计一个登录页面。
我正在尝试从JAVA调用Oracle函数。假设Oracle函数名为FUNCT_PERSON
,带有2个IN参数:username
和password
,并返回用户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,则表示它存在于数据库中,我将继续执行另一个页面。如果没有,那么它将重定向到登录页面。
答案 0 :(得分: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
}
答案 1 :(得分:2)
来自JAVA Docs:
execute方法返回一个布尔值来指示第一个的形式 结果。您必须调用方法getResultSet或getUpdateCount 检索结果;你必须调用getMoreResults移动到任何 后续结果。
返回:如果第一个结果是ResultSet对象,则返回true;否则返回false。如果是假的 第一个结果是更新计数或没有结果
所以你的检查错了。 execute
没有说明手术是否成功。