我正在尝试将自己的服务器编写为个人项目,但是遇到了一些问题。我终于完成了 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/