2012-02-04 50 views
-1

我想從數據庫中檢索數據,然後在java中的表中顯示。下面是代碼示例,有人可以告訴我什麼是錯的,因爲當它運行時,我得到以下錯誤: java.lang.NullPointerException。從java中的數據庫檢索數據

package sample; 

import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import net.proteanit.sql.DbUtils; 

public class Table extends JFrame{ 
    JTable table; 
    Connection conn = null; 
    ResultSet rs = null; 
    PreparedStatement pst = null; 

    private void UpdateJTable(){ 
    String sql = "select firstname, status from tblmember"; 

    try{ 
     pst = conn.prepareStatement(sql); 
     rs = pst.executeQuery(); 
     table.setModel(DbUtils.resultSetToTableModel(rs)); 
    } 
    catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 
    } 
    private void conect(){ 
     conn = myconnection.ConnectDb();   
} 

    public Table(){ 
     setLayout(new FlowLayout()); 

     String [] columnName={"Name", "Status"}; 

     Object [][] data={ 
      {null, null}, 
      {null, null} 
     }; 

     table = new JTable(data, columnName); 
     table.setPreferredScrollableViewportSize(new Dimension(500,50)); 
     table.setFillsViewportHeight(true); 

     JScrollPane sp = new JScrollPane(table); 
     add(sp); 
    } 


    public static void main(String[] args){ 
     Table gui = new Table(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.setSize(700, 500); 
     gui.setVisible(true); 
     gui.setTitle("AAAAAAAA"); 
     gui.UpdateJTable(); 
     gui.conect(); 
    } 
} 
+0

我沒有看到任何你稱爲「connect()」的地方...所以我想這可能是爲什麼 – scartag 2012-02-04 20:00:38

+1

在conn.prepareStatement(sql)之前調用connect(); – scartag 2012-02-04 20:01:15

回答

5

嘗試翻轉這兩行的順序:當您嘗試和更新

gui.UpdateJTable(); 
gui.conect(); 

gui.conect(); 
gui.UpdateJTable(); 

conn爲空。

6
Connection conn = null; 

你永遠不打開的連接。

這裏有幾乎太多的評論。通過這個精心準備開始:

http://docs.oracle.com/javase/tutorial/jdbc/basics/

您有這一個班太多的事情。它具有持久性和顯示在一起混合在一起。我認爲將兩者分開會更好。

在沒有用戶界面的情況下獲取持久代碼。徹底測試,然後創建一個Swing類來使用它。

+0

+1強調。 OP的代碼需要嚴格的重構。 – Perception 2012-02-04 20:04:49