3

私は Java と Oracle 間の接続に不慣れで、ログイン ページを設計しています。

Java から Oracle 関数を呼び出そうとしています。Oracle 関数がFUNCT_PERSON2 つの IN パラメータで呼び出されると仮定します。 usernameandpasswordは、ユーザー 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 に答える