读书人

如何把数据库表的内容传入JTable

发布时间: 2012-12-27 10:17:10 作者: rapoo

怎么把数据库表的内容传入JTable
本帖最后由 albertwmm 于 2012-11-14 09:49:17 编辑 数据库中写了张表 姓名,学号,班级,性别,地址

然后想把这表的内容传入JTable , 并且想对学生中的某个人点击 弹出一个专门的JFrame 来显示这个学生的其他信息。

下面是我写的。。 为什么打开来是空白呢 = = 。
还有如何设置这个学生列的监听呢


public class XSTable extends JFrame{

/**
*
*/
private static final long serialVersionUID = 4681526555438628510L;

public static void main(String[] args) {

new XSTable();
}


Connection conn = null ;
Statement st = null ;
ResultSet rs = null;

public XSTable(){

JTable table=new JTable();

DefaultTableModel model = (DefaultTableModel)table.getModel();

final String[][] data={ };

try {
conn =JdbcUtils.getConnection(); //我写了工具类,注册链接释放的代码
st = conn.createStatement();
rs = st.executeQuery("select*from CanKao_table");

while(rs.next()){

sop.Sop("连接成功"); //工具类中的输出控制台

for(int i=1;i<=model.getRowCount();i++){
data[0][1] = "姓名";
data[0][2] = "学号";
data[0][3] = "性别";
data[0][4] = "班级";
data[0][5] = "地址";
data[i][1] = rs.getString(1).trim();
data[i][2] = rs.getString(2).trim();
data[i][3] = rs.getString(3).trim();
data[i][4] = rs.getString(4).trim();
data[i][5] = rs.getString(5).trim();

sop.Sop("连接成功");
}
}
}
catch (Exception e) {
e.printStackTrace();
}
finally{
JdbcUtils.free(rs, st, conn);
}

table.setModel(model);

table.setPreferredScrollableViewportSize(new Dimension(500,500));

JScrollPane scrollPane=new JScrollPane(table);
this.getContentPane().add(scrollPane,BorderLayout.CENTER);

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

this.pack();
this.setVisible(true);
}

}






各位前辈帮看看阿
[最优解释]
数组首先的初始化,还有,最好使用vector来存储你查出来的数据吗,,然后把它夹在表格上显示。
[其他解释]
你这不是空指针异常嘛,估计是你哪个变量忘了初始化了。报异常的时候你至少得看看哪一行报错,这样才好找错误点啊。你找到那一行,把每一个元素都system.out.println();一下,就知道哪个为空。

看你的思路是想把所有的用户都查询出来都显示在页面上面是吧?
你可以申明一个BUTTON组,然后在table的最后一栏里面添加一个按钮,然后对这个按钮添加监听就行了。
你的这个思路实现起来应该不会太难,当然,现在这种功能一般都使用SSH来实现了。
但是java的页面功能是很简单的,不是很好设置,如果从数据库提取的数据太多的话,一个页面显示不了怎么弄?分栏么?这又得麻烦一整子。
不过做这个还是挺有趣的,至少图形界面是比单纯的代码有意思多了。
今天有点晚了,以后如果代码中如果有错误,当然记得附上代码和报错的行数,或者思路上有问题可以回下贴,我有空帮你看看。

[其他解释]
 public static void main(String[] args) throws Exception{         new XWTable();     }

改成
public static void main(String[] args){
try {
new XWTable();
} catch (Exception e) {


// TODO: handle exception
e.printStackTrace();
}
}
然后你看看报的是什么异常,把那个异常和行号发上来。

[其他解释]
控制台有异常输出吧
[其他解释]
上面的代码里data这个数组没有初始化。
[其他解释]
有前辈看看 帮解答下吗
[其他解释]

引用:
控制台有异常输出吧


是啊。 是有异常输出

连接成功
java.lang.ArrayIndexOutOfBoundsException: 0
at com.JingQiao.Table.XWTable.<init>(XWTable.java:55)
at com.JingQiao.Table.XWTable.main(XWTable.java:21)
[其他解释]
新手观注一下
[其他解释]
引用:
上面的代码里data这个数组没有初始化。


还是没用阿。。。。
[其他解释]
引用:
数组首先的初始化,还有,最好使用vector来存储你查出来的数据吗,,然后把它夹在表格上显示。



可否指教
[其他解释]
引用:
数组首先的初始化,还有,最好使用vector来存储你查出来的数据吗,,然后把它夹在表格上显示。





final Object[][] data=new Object[100][5] ;



public class XWTable extends JFrame{
/**
*
*/
private static final long serialVersionUID = 10L;

public static void main(String[] args) throws Exception{
new XWTable();
}

Connection conn = null ;
Statement st = null ;
ResultSet rs = null;

JTable table ;
TableModel model ;

public XWTable(){

model = new TableModel();
table=new JTable();

table.setModel(model);

table.setPreferredScrollableViewportSize(new Dimension(500,500));//设置窗口大小

JScrollPane scrollPane=new JScrollPane(table); //声明滚动条
this.getContentPane().add(scrollPane,BorderLayout.CENTER);//将滚动条添加到窗口

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.pack();
this.setVisible(true);
}

class TableModel extends DefaultTableModel{
/**
*
*/
private static final long serialVersionUID = 10L;

final String[] columnNames={"姓名","学号","性别","班级","地址"};

final Object[][] data=new Object[100][5] ;

public TableModel(){

try {
conn =JdbcUtils.getConnection();
st = conn.createStatement();
rs = st.executeQuery
("select* from CanKao_table");

Vector ve = new Vector();
ve.removeAllElements();

model.fireTableStructureChanged();

while(rs.next()){

sop.Sop("连接成功");

Vector ve_col = new Vector();



ve_col.addElement(rs.getString(1).trim());
ve_col.addElement(rs.getString(2).trim());
ve_col.addElement(rs.getString(3).trim());
ve_col.addElement(rs.getString(4).trim());
ve_col.addElement(rs.getString(5).trim());

ve.addElement(ve_col);

sop.Sop("连接成功");
}

model.fireTableStructureChanged();
}
catch (Exception e) {
e.printStackTrace();
}
finally{
JdbcUtils.free(rs, st, conn);
}
}

public int getRowCount() {
//返回行的数目
return data.length;
}

public int getColumnCount() {
//返回列的数目
return columnNames.length;
}

public Object getValueAt(int rowIndex, int columnIndex) {
// 返回指定指定行、列的数据
return data[rowIndex][columnIndex];
}

public String getColumnName(int columnName){
//指定列的名字
return columnNames[columnName];
}
public boolean isCellEditable(int row,int col){
//不可编辑
return false;
}

}
}




还是运行不出来,eclipse没有明显的错误
出现异常 NullPointerException


[其他解释]
引用:
以后如果代码中如果有错误,当然记得附上代码和报错的行数,或者思路上有问题可以回下贴,我有空帮你看看。



只有异常 = = 异常蛮多的

我这里有2行 就是9楼的 8和18行
new XWTable();

public XWTable(){


[其他解释]
引用:
你这不是空指针异常嘛,估计是你哪个变量忘了初始化了。报异常的时候你至少得看看哪一行报错,这样才好找错误点啊。你找到那一行,把每一个元素都system.out.println();一下,就知道哪个为空。


还有91行

return data.length;


这行时有时没得 = = 这是为什么啊

读书人网 >J2SE开发

热点推荐