1

ログインページで、ユーザーがシステムに入ることが許可されていることを検証し、ユーザーを検証するメソッドを作成します。

 boolean isValidUser(Connection con,String userName,String pass ){}

デスクトップアプリケーションでは正しく動作しますが、サーブレットで試したところ、テーブルまたはビューが存在しないという例外が発生します。しかし、テーブルは私のデータベースに存在しますか?誰かが問題の場所を教えてもらえますか?

これが方法です

public boolean isValidUser(Connection con,String userName,String pass )throws SQLException
{
    String selSQL="SELECT USER_NAME, USER_PASS FROM OSQS_USERS where USER_NAME =? and USER_PASS =?";
    ResultSet rs =null;
    boolean exist =false;
    PreparedStatement pstmt = null;
    try {

        pstmt = con.prepareStatement(selSQL);
        pstmt.setString(1,userName);
        pstmt.setString(2, pass);

        rs=pstmt.executeQuery();
        if(rs.next())
            exist= true;

    }
//close statment and result sest 
return exist;
}
4

3 に答える 3

3

同じコードがデスクトップ アプリケーションのコンテキストで正しく実行される場合、サーブレットで接続を取得するために使用されている JDBC 接続の詳細を確認する必要がある場合があります。

Oracle などのデータベースの場合、複数のデータベース ユーザー アカウントが 1 つのデータベース インストールに存在する可能性があるため、これは重要です。別の Oracle ユーザー アカウントがデータベース アプリケーションのコンテキストで使用され、別のユーザー アカウントがサーブレットのコンテキストで使用された可能性は十分にあります。Oracle では、データベース オブジェクトは特定のユーザーによって所有され、別のアカウントが同じものにアクセスしたい場合は、2 番目のアカウントに権限を付与する必要があります。

サーブレットからデータベースへのアクセスに使用する資格情報を変更できない場合は、2 番目のユーザーに必要な権限 (この場合は SELECT) を付与することを検討してください。アプリケーションが複数のデータベース アカウントを使用するように設計されている可能性は低いため、2 番目のデータベース ユーザー アカウントには、最初のユーザー アカウントが所有するほぼすべてのオブジェクトに対する権限が必要です。

于 2010-09-07T23:53:49.733 に答える
2

Oracleがテーブルまたはビューが「存在しない」と言っている場合、それらを見つけることができないと言っています...それらを見つけるべきだと思っていても.

デスクトップアプリケーションとサーブレットで実行しているときに、別の Oracle データベースに接続していると推測できます。これは、設計によるものか、偶然によるものである可能性があります。

それぞれの JDBC 構成を見てください。特に接続 URL。

(これがパーミッションの問題である可能性もあります。しかし、オラクルは、テーブルまたはビューを使用するパーミッションがないとあなたに言うだろうと思っていました...それが存在しないとあなたに言うのではありません。 )

編集

根本的な問題は、デスクトップとサーブレットの場合、JDBC URL の「localhost」が別のホスト (したがって Oracle データベース サーバー) に送信していることだと思います。使用しようとしているデータベースを含むサーバーの実際の DNS 名を使用してみてください。

はいの場合、orcle db のどこにデータを追加して、アプリケーションのテストを行う必要がありますか?

ローカル データベース管理者にその質問をする必要があります。

于 2010-09-07T23:52:25.257 に答える
1

データベースユーザーはおそらくテーブルの所有者とは異なるユーザーであるため、そのテーブルに選択権限を付与しない限り(およびすべての参照に接頭辞を付けない限り: tablename -> owner.tablename )、Oracleはそのテーブルへのアクセスを許可しません。

于 2010-09-14T16:00:02.337 に答える