在使用MySQL的内容填充JTable时出现问题。 首先,它在我在控制台(system.out)上输出表的内容时起作用。 错误:当我尝试在JTable上显示时发生NullPointerException。
代码:
import javax.swing.table.DefaultTableModel;
import java.sql.*;
import javax.swing.JOptionPane;
import net.proteanit.sql.DbUtils;
public class ProductTable extends javax.swing.JFrame {
public ProductTable() {
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/inventory_db","root","");
}catch(Exception ex){
System.out.println("Error: "+ex);
}
try{
String query = "SELECT * FROM items_in_hand";
st = con.prepareStatement(query);
rs = st.executeQuery(query);
System.out.println("Records from Inventory Database:");
itemTable.setModel(DbUtils.resultSetToTableModel(rs)); //this line here causes the error
while(rs.next()){
String iname = rs.getString("ItemName");
String price = rs.getString("Price");
String qty = rs.getString("Quantity");
System.out.println("Item: "+ iname +" Price (each): "+price+" Quantity: "+qty);
}
}
catch(Exception ex){
System.out.println("Error: "+ ex);
}
initComponents(); // i have long initComponent codes;
}
private void btn_addActionPerformed(java.awt.event.ActionEvent evt) {
message.setText("");
message2.setText("");
DefaultTableModel model = (DefaultTableModel) itemTable.getModel();
if(!txt_item.getText().trim().equals("")){
try{
String sql = "INSERT INTO items_in_hand (ItemName, Price, Quantity) VALUES (?,?,?)";
st = con.prepareStatement(sql);
st.setString(1,txt_item.getText());
st.setString(2,txt_price.getText());
st.setString(3,txt_quantity.getText());
st.execute();
JOptionPane.showMessageDialog(null , "Saved.");
model.addRow(new Object[] {txt_item.getText(),txt_price.getText(),txt_quantity.getText()});
message2.setText("Successfully Added.");
}catch(Exception ex){
JOptionPane.showMessageDialog(null , ex);
}
}
else{
message.setText("The Item name must be provided.");
}
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ProductTable().setVisible(true);
}
});
}
private Connection con;
private PreparedStatement st = null;
private ResultSet rs;
}
运行: 库存数据库中的记录: 错误:java.lang.NullPointerException
有人可以帮忙吗?
答案 0 :(得分:1)
执行new ProductTable().setVisible(true);
后,您的构造函数被调用并执行从db获取数据的逻辑和
当你执行itemTable.setModel();
时,itemTable为null,因为你没有初始化它,我相信你在initComponents();
方法中做了以后调用