从MS SQL检索出来的数据,如:
select name,filename from sysdatabases;
怎样把这个结果放到JTable控件里面?
(像VB等语言中可以通过设置grid控件的属性来显示这些数据,不知道Java里面怎么设置)

解决方案 »

  1.   

    给个例子:
    Frame类中是这样的
    private Object[][] info;
    private String[] names;
    JTable table = new JTable(info,names);
    table.setPreferredScrollableViewportSize(new Dimension(400, 50));
    JScrollPane scrollPane = new JScrollPane(table);
    this.getContentPane().add(scrollPane);info 和 names是这样获取的:public class ListSession { private Statement stmt ;
    private SessionWrap sew;
    private String[] names;
    private int i, j, rowNum, colNum;
    private Object[][] info;
    private String sqlstr;
    private ResultSet res;
    private ResultSetMetaData rsmd; public ListSession(String table,String items) {
    sew = new SessionWrap();
    stmt=sew.getStatement();
    listConnect(table,items);
    }

    private void listSessionClose() {
    sew.connectClose();
    } private void listConnect(String table,String items) {
    sqlstr = "select count(*) from "+table; 
    try {
    res = stmt.executeQuery(sqlstr);
    res.next();
    rowNum = res.getInt(1);
    } catch (SQLException e) {
    e.printStackTrace();
    } sqlstr = "select "+items+" from "+table;

    try {
    res = stmt.executeQuery(sqlstr);
    rsmd = res.getMetaData();
    colNum = rsmd.getColumnCount();

    formatResult();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    listSessionClose();
    } private void formatResult()throws SQLException {
    names = new String[colNum];
    for (i = 1; i <= colNum; i++) 
    names[i - 1] = rsmd.getColumnName(i);
    info = new Object[rowNum][];
    i = 0;
    while (res.next()) {
    info[i] = new Object[colNum];
    for (j = 1; j <= colNum; j++) {
    info[i][j - 1] = res.getObject(j);
    }
    i++;
    }
    }
    public String[] getNames() {
    return names;
    } public Object[][] getInfo() {
    return info;
    }}
      

  2.   


       需要设置TableModel,利用setModel(TableModel dataModel)方法 ;
       你看看DefaultTableModel这个类吧。
       还是需要自己写一些东西的。
       
      

  3.   

    在网上给你找了个例子
    import java.awt.*;
    import javax.swing.*;
    import java.util.Vector;
    import java.sql.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.table.JTableHeader;
    import java.awt.Rectangle;
     class renshiguanli extends JFrame {
        public renshiguanli() {
            try {
                jbInit();
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }    private void jbInit() throws Exception {
            setSize(new Dimension(1024, 768));
            getContentPane().setLayout(null);
            try {
                ResultSetMetaData rsd = null;
                Vector col = new Vector();
                Vector dat = new Vector();
                sql d = new sql();
                Connection con = null;
                con = d.date();
                Statement s = con.createStatement();
                ResultSet rs = s.executeQuery("Select * from yuangongxinxi");
                rsd = rs.getMetaData();
                int i = 0;
                for (i = 1; i <= rsd.getColumnCount(); i++) {
                    col.add(rsd.getColumnName(i));
                
                } while (rs.next()) {
                    Vector v = new Vector();
                    for (i = 1; i <= rsd.getColumnCount(); i++) {                    v.addElement(rs.getString(i));
                    }
                    dat.addElement(v);
                }
                table = new JTable(dat, col);
                table.setBounds(new Rectangle(11, 0, 266, 117));
            } catch (SQLException e) {
                System.out.println(e);
            }
            table.setFont(new java.awt.Font("新宋体", Font.PLAIN, 12));
            table.setBounds(new Rectangle(4, 58, 10, 12));
            jsp.setFont(new java.awt.Font("新宋体", Font.PLAIN, 12));
            jsp.setBorder(BorderFactory.createEtchedBorder());
            jsp.setBounds(new Rectangle(34, 61, 542, 306));        this.getContentPane().add(table);
            this.getContentPane().add(jsp);        jsp.getViewport().setView(table);    }    JTable table = new JTable();
        JScrollPane jsp = new JScrollPane();
     }
      

  4.   

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.io.*;
    import java.sql.*;
    import java.util.Vector;public class JSwingTable extends JFrame
    {
    JScrollPane jsp=new JScrollPane();
    JTable dbname;
    public JSwingTable()
    {
    super("加载数据库内容示例");
    Container c=getContentPane();
    c.setLayout(new BorderLayout());
    ResultSetMetaData rsd=null;
    Vector col= new Vector();
    Vector dat= new Vector();
    try
    {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    }
    catch(ClassNotFoundException e1)
    {
    System.out.println("未找到相关的驱动程序!");
    }
    try
    {
    Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=master;user=sa;password=pwd;");
    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery("select object_name(syscolumns.id) as '表名',syscolumns.name as '列名',systypes.name as '类型',syscolumns.length as '长度' from syscolumns,systypes,sysobjects where sysobjects.id=syscolumns.id and sysobjects.type='u' and syscolumns.xtype=syscolumns.xtype order by '表名','列名'");
    rsd=rs.getMetaData();
    for(int i=1;i<=rsd.getColumnCount();i++)
    {
    col.add(rsd.getColumnName(i));
    } while(rs.next())
    {
    Vector v=new Vector();
    for(int i=1;i<=rsd.getColumnCount();i++)
    {
    v.addElement(rs.getString(i));
    }
    dat.addElement(v);
    }
    st.close();
    con.close();
    System.out.println("数据库加载成功!");
    }
    catch(SQLException e2)
    {
    System.out.println("table not found!"+e2.getNextException()+"\n"+e2.getSQLState());
    }
    dbname=new JTable(dat,col);
    jsp.getViewport().add(dbname);
    c.add(jsp); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(800,600);
    setVisible(true);
    } public static void main(String[] args)
    {
    JSwingTable jst=new JSwingTable();
    }
    }