2012-02-04 48 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