查询上的Java MySQL NullPointerException

查询上的Java MySQL NullPointerException,java,sql,nullpointerexception,Java,Sql,Nullpointerexception,基本上,我在从数据库获取结果集时遇到了问题。错误发生在这个代码块的第34行(?)附近,但我已经标记了它 ResultSet rs = caq.executeQuery("SELECT * FROM ProjectScore"); //error goes here 我在运行时收到一个空指针异常,这是下面catch语句的输出: null, calculating average score failed java.lang.NullPointerException [Ljava.lang.S

基本上,我在从数据库获取结果集时遇到了问题。错误发生在这个代码块的第34行(?)附近,但我已经标记了它

ResultSet rs = caq.executeQuery("SELECT * FROM ProjectScore"); //error goes here
我在运行时收到一个空指针异常,这是下面catch语句的输出:

null, calculating average score failed

java.lang.NullPointerException

[Ljava.lang.StackTraceElement;@1de2b1
有趣的是,最后我在类中使用了完全相同的连接,并且没有收到任何错误。将语句复制到第一个类也不起作用,因此我假设它是其他的。我想这就是我所拥有的一切,感谢您的帮助:)

import java.awt.*;
导入java.awt.event.*;
导入java.sql.*;
导入javax.swing.*;
公共类MainWindow扩展JFrame实现ActionListener{
//.......................
私人int[]平均分数;
//参考资料
私人登录窗口;
私有newuserwindownuw;
私人窗口软件;
私有布尔值IsAnotherIndowOpen=false;
私有布尔值isLoggedIn=false;
私有连接和查询caq;
公共主窗口(连接和查询caq)引发SQLException{
this.caq=caq;
//.................................
//中间的
平均分数=新整数[9];
计算Ragescore();
可设置();
//............................
}
私有void calculateAverageScore()引发SQLException{
试一试{
ResultSet rs=caq.executeQuery(“从ProjectScore中选择*);//此处出现错误
int[]计数=新的int[9];
整数[]总分数=新整数[9];
while(rs.next()){
int itemID=rs.getInt(“itemID”);
计数[项目ID]++;
totalScore[itemID]+=rs.getInt(“分数”);
}
对于(int i=0;i<9;i++){
averageScore[i]=总分[i]/计数[i];
}
}
捕获(例外e){
System.out.print(如getMessage());
System.out.println(“,计算平均分数失败”);
System.out.println(例如toString());
System.out.println(例如getStackTrace().toString());
}
}
}
//下节课
导入java.sql.*;
公共类连接和查询{
专用静态连接;
私有静态语句;
私人主窗口;
public connectionandquerys()抛出ClassNotFoundException、SQLException{
mw=新的主窗口(此窗口);
connect();
}
public static void connect()抛出ClassNotFoundException、SQLException{
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
connection=DriverManager.getConnection(“jdbc:mysql://zzzzzzzzzz“,”yyy“,”xxxx“;//我想我不允许透露那个信息
statement=connection.createStatement();
}捕获(例外e){
System.out.println(“连接到数据库失败”);
}
}
public ResultSet executeQuery(字符串查询)引发SQLException{
返回语句.executeQuery(查询);
}
public int executeUpdate(字符串更新)引发SQLException{
return语句。executeUpdate(更新);
}
公共静态void main(字符串[]args)抛出ClassNotFoundException、SQLException{
ConnectionAndQueries caq=新的ConnectionAndQueries();
}
}
//另一个使用connection类的类,可以工作。
导入java.awt.*;
导入java.awt.event.*;
导入java.sql.*;
导入javax.swing.*;
公共类LogInWindow扩展JFrame实现ActionListener{
//........................
//参考资料
私人主窗口;
私有连接和查询caq;
公共登录窗口(主窗口mw、连接和查询caq){
这1.mw=mw;
this.caq=caq;
//......................
}
已执行的公共无效操作(操作事件e){
如果(例如getSource()==登录){
字符串usn=usernameField.getText();
String pwd=passwordField.getText();
试一试{
结果集rs=caq.executeQuery(“从项目客户中选择*);
while(rs.next()){
如果(rs.getString(“用户名”).equals(usn)){
if(rs.getString(“passwrd”).equals(pwd)){
登录成功(usn);
mw.userLoggedIn(usn);
退出();
}
}
}
if(mw.isUserLoggedIn()==false)
登录失败();
}捕获(异常e2){
System.out.print(e2.getMessage());
System.out.println(“,登录时出错”);
System.out.println(e2.toString());
}
}
否则如果(例如getSource()==退出){
退出();
}
}
//............................
}

看起来您的
连接和查询对象为空

我会在构造时检查它是否为空,而不是在您尝试使用它时。这将更早地捕获错误(并且在更有用的时间)。也有可能(因为错误报告不清楚-见下文)出现以下情况:

catch (Exception e) {
    System.out.println("Connecting to the database failed");
}
正在捕获错误,但未初始化语句对象(null)。作为先决条件,我会检查语句的空值,或者最好还是抛出原始异常,这样客户机代码就必须处理断开的
连接和查询
对象

这个

这不是很有帮助,顺便说一句。我宁愿:

e.printStackTrace();

因为它将转储整个堆栈跟踪,并将其转储到
stderr
(错误的常规目标)。目前,您正在堆栈帧数组上调用
toString()
,但这实际上没有任何用处。

看起来您的
连接和查询对象为空

我会在构造时检查它是否为空,而不是在您尝试使用它时。这将更早地捕获错误(并且在更有用的时间点捕获)
System.out.println(e.getStackTrace().toString());
e.printStackTrace();
public ConnectionAndQueries() throws ClassNotFoundException, SQLException{
    mw = new MainWindow(this);
    connect();
}