java - 使用 JDBC 的 NullPointerError

标签 java mysql jdbc nullpointerexception

我正在尝试将自己的服务器编写为个人项目,但是遇到了一些问题。我终于完成了 Java 服务器和 C# 客户端之间的数据包系统的设置,这让我很高兴,尽管我得到了一些帮助。无论如何,这是我编写的代码,试图让它正常工作。我使用静态变量创建了 SQLManager,因为我读到数据库连接应该是静态的,如果这是不正确的,请告诉我。

错误如下:

Exception in thread "main" java.lang.NullPointerException
com.fmeg.server.util.SQLManager.runQuery(SQLManager.java:37)

这是我的 SQL 类:

public static boolean connectToDatabase() {
    try {
        connection = DriverManager.getConnection(host, credentials[0], credentials[1]);
        connected = true;
    } catch (Exception e) { connected = false; }
    Misc.log("Database: " + database + " || Connection State: " + connected);
    return connected;
}

public static boolean runQuery(String query) {
    try {
        ResultSet rs = checkQuery(query);   

        if(rs == null) 
            Misc.error("Result Set returned null.");

        if(rs.next())
            Misc.log("Current Row: " + rs.getRow());

        return true;
    } catch (SQLException e) { 
        e.printStackTrace();
        return false;
    }
}

public static ResultSet checkQuery(String query) throws SQLException {
    try {
        Misc.log(query);
        return statement.executeQuery(query);
    } catch (Exception e) {
        destroyConnection();
        return null;
    }
}

private static void destroyConnection() {
    try {
        statement.close();
        connection.close();
        connected = false;
        Misc.error("Database connection destroyed!");
    } catch (Exception e ) { }
}

显然,ResultSet 返回 null,这是控制台中的输出。

[LOG]: Database: Unity3D || Connection State: true
[LOG]: Server <Test Realm> Successfully Started on port: 9955!
[LOG]: select * from `accounts`
[ERROR]: Result Set returned null.

这是我调用查询的地方:

SQLManager.runQuery("select * from \'accounts\'");

任何指示将不胜感激,因为我不完全明白问题是什么。为了回答这些问题(如果确实出现),是的,我确实有一个名为“帐户”的表,并且它确实有条目。

最佳答案

表名存在语法错误。表名不应该是文字,而应该用反引号引起来。这些反引号是可选的,除非表名称中有任何特殊字符或者它是保留字。

正是因为这个错误,声明

return statement.executeQuery(query);

导致异常,并且该方法为 ResultSet 返回 null
您最好捕获异常并查看堆栈跟踪上的内容。

更改:

QLManager.runQuery("select * from \'accounts\'");

致:

QLManager.runQuery("select * from `accounts`");

关于java - 使用 JDBC 的 NullPointerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22281820/

相关文章:

java - NumberFormat.getCurrencyInstance() 不返回语言环境中国和法国的货币符号 (jdk-1.8)

java - 我想使用共享首选项保存,但应用程序崩溃了

java - 是否可以用Java创建一个矩形数组

java - 通过 Java 程序使用选择器从 cloudant DB 获取数据时出现异常

c# - 获取日期值并将其存储在 MySQL 数据库中?

python mysql UPDATE 在没有 WHERE 子句的情况下不起作用

mysql - 找不到 MySQL 作为服务

java - 使用 ScriptRunner "runScript"方法时,如果一次插入失败则回滚

java - JDBC 资源

java - JPA 性能优化或替代方案