我在MySQL中有一个名为“clienttable”的表,它有11列,第9列是“yahooId”,第11列是“password”。我有两个例外:1:行{{的SQL语法1}}和2:行rst = stmt.executeQuery("SELECT yahooId AND password FROM clienttable");
的NullPoniterException请帮帮我,谢谢。
这也是我在数据库类中编写的内容:
while (rst.next())
例外:
public static boolean Test(String userName, String password) {
boolean bool = false;
Statement stmt = null;
try {
stmt = conn.createStatement();
} catch (SQLException ex) {
Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, ex);
}
ResultSet rst = null;
try {
rst = stmt.executeQuery("SELECT yahooId AND password FROM clienttable");
} catch (SQLException ex) {
Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, ex);
}
try {
while (rst.next()) {
if (rst.getString(9).equals(userName) && rst.getString(11).equals(password)) {
bool = true;
} else {
bool = false;
}
}
} catch (SQLException ex) {
Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, ex);
}
return bool;
}
答案 0 :(得分:6)
您的选择应该是:
SELECT yahooId, password FROM clienttable
你有一个AND而不是一个逗号。由于查询无效,因此不返回任何ResultSet,并且您获得空指针。
编辑: 您的查询将返回结果集,而不是您想要的结果集。 yahooId AND密码将返回一列 - 这些列上的逻辑AND结果。然后当你转到rs.getString(“yahooId”)时,返回null,你就有了一个.equals()。根本问题是你需要一个逗号,但我的原因是错误的。
编辑2: 我尝试了查询,它在我的mysql上工作。也许这是一个版本的东西。无论如何,对于他的问题,我在编辑之前是正确的。
答案 1 :(得分:4)
SQL错误导致第二个错误。您需要使用逗号分隔列名,而不是使用“AND”。
此外,yahooid和密码是表格中的第9和第11列并不重要。修复SQL语法错误后,它们是查询中的第一列和第二列,因此您分别使用rst.getString(1)和rst.getString(2)检索它们。
此外,按照您的方式记录和忽略异常是一个非常糟糕的想法。因为除了记录之外没有对第一个异常做任何事情,所以你已经引起了级联的其他异常。除非您使异常处理程序实际处理异常,否则这将继续发生。
答案 2 :(得分:3)
(1)
SELECT yahooId AND password FROM clienttable
AND
不属于那里。它应该读
SELECT yahooId, password FROM clienttable
(2)
从查询中捕获异常后,会出现next
的循环。如果您的查询引发了异常,那么在rst
中无需查看;所以这段代码应该都在try
。