java - 尝试将行添加到 DefaultTableModel 模型时出现 Java 空指针异常
问题描述
我正在尝试使用来自文本字段的用户输入来查询数据库并将结果显示在 JTable 中。我可以在数据库中显示所有结果(不使用搜索)而不会出错,但是当使用文本搜索时,我得到空指针异常。
public static void loadServiceTable(JTable tblService,String searchData,String searchField){
try {
//get tblItem model
DefaultTableModel model=(DefaultTableModel) tblService.getModel();
//remove all rows
model.getDataVector().removeAllElements();
System.out.println("Rows cleared");
//create service array from services in DB according to search
Service[] serviceArray=ServiceController.getAllService(searchData,searchField);
//add one row each for service in array
System.out.println("Service array success, length = "+serviceArray.length);
for(Service s:serviceArray){
model.addRow(new Object[]{
s.getServiceID(),
//error
s.getName(),
s.getDetail(),
s.getPrice(),
});
}
tblService.repaint();
System.out.println("Repaint finished");
} catch (ClassNotFoundException ex) {
Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex);
}
}
/*(edited) This is the output.
"After getting table model
After getting service arr, arr length = 1
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at lk.ijse.ssc.view.MainApp.loadServiceTable(MainApp.java:2800)"*/
我正在使用以下方法显示所有数据(无需搜索)并且它可以正常工作。
public static void loadServiceTable(JTable tblService){
try {
DefaultTableModel model=(DefaultTableModel) tblService.getModel();
model.getDataVector().removeAllElements();
Service[] serviceArray=ServiceController.getAllService();
for(Service s:serviceArray){
model.addRow(new Object[]{
s.getServiceID(),
s.getName(),
s.getDetail(),
s.getPrice(),
});
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex);
}
}
getAllService(searchData,searchField) 方法如下所示。
public static Service[] getAllService(String searchData,String searchField) throws ClassNotFoundException, SQLException{
//establish DB connection
Connection con=DBConnection.getInstance().getConnection();
//get no of services in DB and create array
Service[] serviceArray=new Service[getRowCount(searchData,searchField)];
//SQL statement to load matching services info from DB
PreparedStatement pstm;
if(searchField.equals("serviceID")) pstm=con.prepareStatement("SELECT service_id,name,detail,price FROM service WHERE service_id=?;");
else pstm=con.prepareStatement("SELECT service_id,name,detail,price FROM service WHERE name=?;");
pstm.setString(1,"%"+searchData+"%");
ResultSet set=pstm.executeQuery();
//create Item models for each record in DB and store them in Item array
int index=0;
while(set.next()){
String serviceID=set.getString(1);
String name=set.getString(2);
String detail=set.getString(3);
Double price=set.getDouble(4);
serviceArray[index]=new Service(serviceID,name,detail,price);
index++;
}
return serviceArray;
}
我对 Java 很陌生,这是我使用 Java Swing 和 MVC 架构的第三个程序。任何帮助深表感谢。
解决方案
推荐阅读
- python - 将 jupter Notebook 代码转换为正确的 python 函数
- python - 如何从适合我的条件的 csv 文件中删除一行并写入新的输出文件
- python - 是否可以在用户键入时突出显示文本?
- python - 如何使用另一个文件进行打印(“{}”)?
- dictionary - 在 Julia 中按顺序打印整数字典
- powershell - 使用 Move-Item 时文件已存在时,Powershell 无法创建文件
- vue.js - 加载资源失败:net::ERR_HTTP2_PROTOCOL_ERROR -Vue.js 部署在 IIS10
- java - Java类图中带有接口参数的构造函数
- javascript - 面临断开链接检查器的问题
- json - 需要一个“int”类型的值,但在 Flutter 中得到一个“String”类型的值