2014-09-18 2 views
0

Проблема с заполнением JTable содержимым из MySQL. Во-первых, он работает, когда я выводил содержимое таблицы на консоли (system.out). Ошибка: NullPointerException происходит, когда я пытаюсь отобразить его на JTable.Ошибка: java.lang.NullPointerException (jtable)

Код:

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

Я попытался изменить rs = st.executeQuery (query); to rs = st.executeQuery(); все еще не работает. – benziv

+2

Привет, пожалуйста, вставьте стек. – frankfg

+1

Пожалуйста, предоставьте [MCVE] (http://stackoverflow.com/help/mcve) для лучшей помощи раньше :) – Frakcool

ответ

1

Когда вы new ProductTable().setVisible(true); ваш конструктор вызывался и выполнил логику выборки данных из БД и

когда вы itemTable.setModel(); itemTable равно нулю, потому что вы не инициализировать его, которую я считаю, что вы делаете в initComponents(); методе который вызывается позже

+0

ах получил. initComponents() должен быть вызван до setModel(), поэтому таблица будет инициализирована. спасибо, я ценю вашу помощь! – benziv

Смежные вопросы