package shujuku;import com.sun.rowset.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.sql.rowset.*;public class ResultSetTable {
public static void main(String[] args) {
JFrame frame = new ResultSetFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class ResultSetFrame extends JFrame {
public ResultSetFrame() {
setTitle("ResultSet table");
setSize(400, 300);
try {
conn = getConnection();
        stat = conn.createStatement();
String query = "SELECT * FROM authors";//authors是数据库表的名字
rs = stat.executeQuery(query);
CachedRowSet crs = new CachedRowSetImpl();
crs.populate(rs);
model = new ResultSetTableModel(crs); JTable table = new JTable(model);
scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout.CENTER);
validate();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
JPanel p = new JPanel();
add(p, BorderLayout.NORTH); addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
});
} /**
 * Gets a connection from the properties specified in the file
 * database.properties.
 * 
 * @return the database connection
 */
public static Connection getConnection() throws SQLException, IOException {
Properties props = new Properties();
FileInputStream in = new FileInputStream("sql2005.properties");

props.load(in);
in.close(); String drivers = props.getProperty("driver");
if (drivers != null)
System.setProperty("driver", drivers);
String url = props.getProperty("url");
String username = props.getProperty("user");
String password = props.getProperty("password"); return DriverManager.getConnection(url, username, password);
} private JScrollPane scrollPane;
private ResultSetTableModel model;
private ResultSet rs;
private Connection conn;
private Statement stat;
}class ResultSetTableModel extends AbstractTableModel { private ResultSet rs;
private ResultSetMetaData rsmd; public ResultSetTableModel(ResultSet aResultSet) {
rs = aResultSet;
try {
rsmd = rs.getMetaData();
} catch (SQLException e) {
e.printStackTrace();
}
} public String getColumnName(int c) {
try {
return rsmd.getColumnName(c + 1);
} catch (SQLException e) {
e.printStackTrace();
return "";
}
} public int getColumnCount() {
try {
return rsmd.getColumnCount();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
} public Object getValueAt(int r, int c) {
try {
rs.absolute(r + 1);
return rs.getObject(c + 1);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
} public int getRowCount() {
try {
rs.last();
return rs.getRow();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
}
///////以下是sql 2005的属性信息
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;DatabaseName=authors
user=
password=  

解决方案 »

  1.   

    给楼主的建议:把界面层和业务逻辑层分离。
    比如ResultSetFrame类用来做界面, ResultSetTableModel类用来做业务逻辑。
    对属性文件的读取,连接数据库得到结果集,从结果集中获得数据放到一个TableModel中等等,
    这些都可以放到ResultSetTableModel里面去。
      

  2.   

    用jtable的其中这么一个构造,接收两个Vector集合的,JTable table=new JTable(rowDate,columnNames);前面参数是数据,用ResultSet来获取并添加进去,后一个是列名