java - 对代码进行必要的更改时出现 java.lang.NullPointerException(Java Netbeans IDE 7.4 和 JDK 1.7)
问题描述
我的初始代码如下。
public class JFrameAllMarks extends javax.swing.JFrame {
public JFrameAllMarks() {
initComponents();
setDefaultCloseOperation(JFrameAllMarks.DISPOSE_ON_CLOSE);
showMark();
}
public ArrayList<Marks> markList1()
{
ArrayList<Marks> marksList = new ArrayList<>();
try {
DBConnection obj = new DBConnection();
String selectquery = "SELECT * FROM Marks";
ResultSet rs = obj.getdata(selectquery);
Marks objmk;
while(rs.next())
{
objmk = new Marks(rs.getString("StudentID"), rs.getString("StudentName"), rs.getString("SubjectID"), rs.getString("SubjectName"), rs.getString("BatchID"), rs.getInt("Marks"));
marksList.add(objmk);
}
}
catch (SQLException ex) {
Logger.getLogger(JFrameAllMarks.class.getName()).log(Level.SEVERE, null, ex);
}
return marksList;
}
public void showMark()
{
ArrayList<Marks> list = markList1();
DefaultTableModel dtm = (DefaultTableModel)jTableAllMarks.getModel();
Object[] row = new Object[6];
for(int i=0; i<list.size();i++)
{
row[0] = list.get(i).getStudentID();
row[1] = list.get(i).getStudentName();
row[2] = list.get(i).getSubjectID();
row[3] = list.get(i).getSubjectName();
row[4] = list.get(i).getBatchID();
row[5] = list.get(i).getMarks();
dtm.addRow(row);
}
}
以及上述代码中 ArrayList 所需的 java 类。
package AllMarksList;
/**
*
* @author Admin
*/
class Marks {
private String StudentID, StudentName, SubjectID, SubjectName, BatchID;
private int Marks;
public Marks (String StudentID, String StudentName, String SubjectID, String SubjectName, String BatchID, int Marks)
{
this.StudentID=StudentID;
this.StudentName=StudentName;
this.SubjectID=SubjectID;
this.SubjectName=SubjectName;
this.BatchID=BatchID;
this.Marks=Marks;
}
public String getStudentID()
{
return StudentID;
}
public String getStudentName()
{
return StudentName;
}
public String getSubjectID()
{
return SubjectID;
}
public String getSubjectName()
{
return SubjectName;
}
public String getBatchID()
{
return BatchID;
}
public int getMarks()
{
return Marks;
}
}
上面的代码执行正确。它显示了驻留在“标记”数据库表中的所有数据。
所以,我复制并粘贴了这个和相关的类,以创建另一个 JFrame 和 java 类,其功能完全相同。进行了相关更改,以在原始和复制的 JFrame 和 java 类之间进行不同的更改。
在这个新的 JFrame 中,我想从数据库中只提取包含某个学生 ID 的数据。因此,我将选择查询更改为以下内容。
String selectquery = "SELECT * FROM Marks WHERE StudentID=S001";
执行此新代码时,我收到以下错误。
SEVERE: null
java.lang.NullPointerException
at StudentMarks.JFrameStudentAllMarks.markList1(JFrameStudentAllMarks.java:47)
at StudentMarks.JFrameStudentAllMarks.showMark1(JFrameStudentAllMarks.java:63)
at StudentMarks.JFrameStudentAllMarks.<init>(JFrameStudentAllMarks.java:30)
at StudentMarks.JFrameStudentAllMarks$3.run(JFrameStudentAllMarks.java:224)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:706)
at java.awt.EventQueue$3.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:715)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
尝试更改代码行,由错误确定。但是没有运气解决这个问题。
非常感谢您的帮助。
解决方案
因为您使用 Java 字符串创建了 SQL 查询,所以需要使用 SQL 语法。SQL 使用单引号来分隔字符串,因此您需要手动将它们添加到查询中。
这是需要的字符串:
String selectquery = "SELECT * FROM Marks WHERE StudentID='S001'";
推荐阅读
- macos - 通过macOS中的Finder打开vscode中的文件夹?
- unit-testing - xUnit + Unquote 测试:报告列表差异足够大的第一项
- c# - 统一的目标框架名称是什么?
- java - 如何将数据放入已解析的 JSONObject
- python - 我如何关闭 python 但继续运行
- salesforce - 静态资源图像未在 LWC 中显示
- protractor - 如何使用量角器创建 Azure SQL 数据库连接?
- c - 使用 C 将随机生成的大尺寸矩阵相乘时出错
- javascript - JS提取括号外的所有文本
- visual-studio-code - 语句中间的`ifdef`关键字在vscode中未突出显示