日期:2014-05-20  浏览次数:20851 次

关于DefaultTableModel的addRow的问题
刚看了DefaultTableModel,自己练习下,参考网上的方法可以读出数据到table里,我自己用addRow的怎么会显示不出来数据,也没提示错误,有点晕了,拜托各位给看看:
数据表的机构如下:
DROP TABLE IF EXISTS jtabletest;
   CREATE TABLE jtabletest
(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INT,
birthday DATE,
school VARCHAR(30) NOT NULL
);
INSERT INTO `jtabletest` (`name`, `age`, `birthday`, `school`) VALUES ('jxtm','20','2000-01-21','北京大学');
INSERT INTO `jtabletest` (`name`, `age`, `birthday`, `school`) VALUES ('bsdlover','24','1989-01-21','清华大学');

下面这段代码可以实现:

import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.ResultSetMetaData;

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import java.util.Vector;

public class Test {
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/jxtmtest";
public static final String DBUSER = "root";
public static final String DBPASS = "123456";
public static void main(String args[]) throws Exception{
JFrame frame = new JFrame("Jtable测试");
Connection conn =  null;
JTable table;
DefaultTableModel myTable=new DefaultTableModel();
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
      Statement stmt=conn.createStatement();
      ResultSet rs=stmt.executeQuery("select * from jtabletest");
      ResultSetMetaData metaData = rs.getMetaData();
      int number=metaData.getColumnCount();//表的总列数
      Vector<Object> rows=new Vector<Object>();
      Vector<Object> columnNames=new Vector<Object>();
      for(int num=0;num<number;num++){
columnNames.addElement(metaData.getColumnName(num+1));
}
while(rs.next()){
Vector<Object> newRow = new Vector<Object>();
for (int i = 1; i <= number; i++) {
newRow.addElement(rs.getObject(i));
    }
rows.addElement(newRow);
myTable=new DefaultTableModel(rows,columnNames);
}
rs.close();
stmt.close();
conn.close();

table=new JTable(myTable);
JScrollPane scr = new JScrollPane(table);
frame.add(scr,BorderLayout.CENTER);
frame.setSize(400,200);
frame.setVisible(true);
}
}

我自己用addRow的就不行:

import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.ResultSetMetaData;

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import java.util.Vector;

public class Test1 {
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/jxtmtest";
public static final String DBUSER = "root";
public static final String DBPASS = "123456";
public static void main(String args[]) throws Exception{
JFrame frame = new JFrame("Jtable测试");
Connection conn =  null;
JTable table;
DefaultTableModel myTable=new DefaultTableModel();
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
      Statement stmt=conn.createStatement();
      ResultSet rs=stmt.executeQuery("select * from jtabletest");
      ResultSetMetaData metaData = rs.getMetaData();
      int number=metaData.getColumnCount();//表的总列数
      Vector<Object> columnNames=new Vector<Object>();
     
for(int num=0;num<number;num++){
columnNames.addElement(metaData.getColumnName(num+1));
}
myTable.addRow(columnNames);

while(rs.next()){
Vector<Object> newRow = new Vector<Object>();
for (int i = 1; i <= number; i++) {
newRow.addElement(rs.getObject(i));
    }
myTable.addRow(newRow);
}
rs.close();
stmt.close();
conn.close();

table=new JTable(myTable);
JScrollPane scr = new JScrollPane(table);
frame.add(scr,BorderLayout.CENTER);
frame.setSize(400,200);