0

私はそれが基本であり、おそらく本当に単純であることを知っていますが、特定のint(私の場合はid)についてデータベースにクエリを実行したいという次の状況に苦労していますが、どういうわけかデータから返されたデータにアクセスできません設定。

データベース管理システムでクエリをテストしましたが、動作します。エラー/スタックは発生しませんが、メソッドの結果は常に -1 です (つまり、失敗することを意味します:( int が解析されていないため)

コード:

public int UserFactoryEngine(String n, String p){
        // query for user data, validate and return
        Connection conn = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            System.out.println("Failure intialization of the driver! ");
            e.printStackTrace();
        }
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=BugsSurveillance;user=sa;password=1234;integratedSecurity=true;";
        try {
            conn = DriverManager.getConnection(connectionUrl);
        } catch (SQLException e) {
            System.out.println("Failure intialization of the connection! ");
            e.printStackTrace();
        }
        System.out.println("Connected... ");

        String sqlquery;
        PreparedStatement preparedStatement;
        ResultSet rs;
        try {
            preparedStatement = conn.prepareStatement("SELECT id FROM Users WHERE name = ?  AND pass = ? ",
                    ResultSet.TYPE_SCROLL_INSENSITIVE,  ResultSet.CONCUR_READ_ONLY);
            preparedStatement.setString(1, n);
            preparedStatement.setString(2, p);
            rs = preparedStatement.executeQuery();

            while (rs.next()){
                System.out.println(rs.getInt(1));
            }

        } catch (SQLException e) {
            System.out.println("Prepared statement failure!");
            e.printStackTrace();
        }
        return -1;
    }
4

2 に答える 2

0

からコンソールへの出力が得られません

while (rs.next()){
    System.out.println(rs.getInt(1));
}

結果が出ないからです。最初、ResultSet は最初の行の前を指しています。next() が呼び出されると、次の行にインクリメントし、新しい現在の行が有効な場合にのみ true を返しますが、この場合は有効であってはなりません。

行が存在すると言うので、行を置き換えてみてください

preparedStatement.setString(1, n);
preparedStatement.setString(2, p);

テスト用にハードコードされた値で。したがって、ユーザー名が admin で、パスワードが 1234 の場合。

preparedStatement.setString(1, "admin");
preparedStatement.setString(2, "1234");

あなたが試すことができる別のテストは、

SELECT * FROM users

その方法で結果が得られるかどうかを確認します。

于 2013-04-23T01:05:30.173 に答える
0

これがログイン ファクトリ (実装しようとしているもの) であることを考慮して、私は JPasswordField を使用してきましたが、getPassword() メソッドに関してはもう少し注意が必要なようです。そのため、データベースで一致する文字列をうまく見つけることができませんでした。

修正: 隠し文字で JTextfield を使用していました。

于 2013-04-23T11:36:53.107 に答える