我知道它是基础知识,可能非常简单,但我正在努力解决以下情况,我想查询数据库中的特定int(在我的情况下为id),但不知怎的,我无法访问返回的数据来自数据集。
我已经在db管理系统中测试了查询,但它确实有效。我没有错误/堆栈,但我的方法的结果总是-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;
}
答案 0 :(得分: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
看看你是否得到任何结果。
答案 1 :(得分:0)
考虑到这是一个登录工厂(我正在尝试实现)我一直在使用JPasswordField,在getPassword()方法方面似乎需要更多的注意力。因此,我无法在数据库中成功找到匹配的字符串。
修复:使用带有隐藏字符的JTextfield。