SQL语法!空指针异常!

时间:2010-01-10 15:30:09

标签: java

我在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;



}

3 个答案:

答案 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

之内
相关问题