0

我知道这是基础知识,可能真的很简单,但我在以下情况下苦苦挣扎放。

我已经在数据库管理系统中测试了查询并且它可以工作。我没有得到任何错误/堆栈,但我的方法的结果始终是-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 回答