你把数据用sql检索出来,然后放到tabelmodel中就可以了

解决方案 »

  1.   

    我只会用SQL语句得到字符串形式的结果,而JTable中需要是Vector类型或Object数组型的数据呀
    麻烦高手将关键的代码告诉我
    不胜感激!!!
      

  2.   

    wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww没人理我这个问题吗我怎么弄呀
      

  3.   

    这样,比如数据库中有id,name,sex3个字段,你得到字符串形式的结果后应该是二维数组,记录数为m的话,数组是array[m][3]对吧?你可以先写一个类,它包含3个成员id,name,sex,你再new一个一维对象数组a[m],对于每个a[i](i=0,1,2)你把array[i]中的array[i][0],array[i][1],array[i][2]赋给a[i]中的id,name,sex成员。不就得到了结果的对象数组了吗?显示的时候只需去a[i].id,a[i].name和a[i].sex就可以了。呵呵
      

  4.   

    这样恐怕不行吧,一个是字符串类型,一个是Object类型,怎么可以赋值呢?
      

  5.   

    是赋给Object对象中的成员呀,这三个成员你可以定义为字符串类型嘛!我都做过了,可以的。
      

  6.   

    import java.sql.*;
    import javax.swing.table.*;
    import java.util.*;
    import java.io.*;class ResultsModel extends AbstractTableModel
    {
    public void setResultSet(ResultSet results)
    {
    try
    {
    ResultSetMetaData metadata = results.getMetaData();

    int columns = metadata.getColumnCount();
    columnNames = new String[columns];
    for(int i = 0; i < columns; i++)
        columnNames[i] = metadata.getColumnLabel(i+1);
        
    dataRows = new Vector();
    String[] rowData;
    while(results.next())
    {
    rowData = new String[columns];
    try
    {
        for(int i = 0; i < columns; i++)
            rowData[i] = new String((new String(results.getString(i + 1)+"").trim()).getBytes("ISO-8859-1"),"GBK");
    }
    catch(UnsupportedEncodingException  e)
    {
    e.printStackTrace();
    }
    dataRows.addElement(rowData);
    }
    fireTableChanged(null);
    }
    catch(SQLException sqle)
    {
    System.err.println(sqle);
    }
    }

    public int getColumnCount()
    {
    return columnNames.length;
    }

    public int getRowCount()
    {
    if(dataRows == null)
        return 0;
    else
        return dataRows.size();
    }

    public Object getValueAt(int row, int column)
    {
    return ((String[])(dataRows.elementAt(row)))[column];
    }

    public String getColumnName(int column)
       {
    return columnNames[column] == null ? "No Name" : columnNames[column];
    } public void setValueAt(Object value, int row, int col)
    {
    ((Object[])(dataRows.elementAt(row)))[col] = value;
    fireTableCellUpdated(row, col);
    }

    String[] columnNames = new String[0];
    Vector dataRows = new Vector();
    }
    然后建立一个ResultsModel 对象,用此对象建立JTable, 然后从数据库检索出来数据返回一个
    ResultSet,调用此ResultsModel对象的setResultSet方法即可!
    ResultsModel model;
    JTable table;
    model = new ResultsModel();
    table = new JTable(model);
    model.setResultSet(con.dbQuery(sqry));
    con.dbQuery(sqry)为具体的查询语句,返回一个ResultSet对象
      

  7.   

    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.TableModelEvent;/**
    * <p>Title: 可滚动结果集TableModel</p>
    * 参数 aResultSet 为sql的select语句的查询结果
    */public class ScrollingResultSetTableModel  extends AbstractTableModel {
        
        public ScrollingResultSetTableModel(ResultSet aResultSet) 
        {
            this.aResultSet = aResultSet;
            if (aResultSet != null) 
            {
                try 
                {
                    this.rsmt = aResultSet.getMetaData();
                }
                catch (SQLException e)
                {
                    System.out.println("Error " + e);
                }
            }
        }    public String getColumnName(int c)
        {
            if (rsmt != null) 
            {
                try 
                {
                    return rsmt.getColumnName(c + 1);
                }
                catch (SQLException e)
                {
                    System.out.println("Error " + e);
                    return "";
                }
            }
            return "等待查询结果";
       }   public int getRowCount() 
       {
          if (aResultSet != null)
          {
              try
              {
                  aResultSet.last();
                  return aResultSet.getRow();
              }
              catch (SQLException e)
              {
                  System.out.println("Error-tm " + e);
                  return 0;
              }
           }
           return 0;
        }    public int getColumnCount() 
        {
           if (rsmt != null)
           {
               try 
               {
                   return rsmt.getColumnCount();
               }
               catch (SQLException e)
               {
                   System.out.println("Error " + e);
                   return 0;
               }
           }
           return 1;
        }    public Object getValueAt(int r, int c)
        {
            if (aResultSet != null) 
            {
             try
            {
           aResultSet.absolute(r + 1);
           return aResultSet.getObject(c + 1);
            }
            catch (SQLException e)
            {
           System.out.println("Error " + e);
           return null;
            }
            }
            return null;
        }    public boolean isCellEditable(int rowIndex, int columnIndex) 
        {
            return true;
        }    public void setValueAt(Object aValue, int rowIndex, int columnIndex) 
        {
            try 
            {
                aResultSet.absolute(rowIndex + 1);
             aResultSet.updateObject( columnIndex+1 ,aValue);
             aResultSet.updateRow();
            }
       catch (SQLException ex) 
       {
             System.out.println("tm-setValueAt 的err"+ex);
            }
            /****这里使用如下的任何一条语句都不能使在jtable中修改的cell值刷新
             *****而查看数据库中的值已被更改,如何才能使在jtable中修改的cell值刷新呢???
            */
            fireTableDataChanged();
    //fireTableChanged(new TableModelEvent(this, TableModelEvent.HEADER_ROW));
    //fireTableStructureChanged();
    // fireTableCellUpdated(1 , 2);
    // fireTableCellUpdated(rowIndex , columnIndex );
       }   protected ResultSet getResultSet()
       {
           return aResultSet;
       }   public void setResultSet(ResultSet aResultSet) 
       {
           this.aResultSet = aResultSet;
    /****这里设置了新的查询结果集后,调用下面任意方法都不能使jtable更新
    *    而使用ResultSet rs = stmt.executeQuery("select  姓名,性别 from 职员
    *     where 职员.姓名="张三"");
    *    tm=new ScrollingResultSetTableModel(rs);
    *     jTable1.setModel(tm);
    *才刷新了jTable,怎样才能在TableModel中更新表呢????
    */
       //   this.fireTableDataChanged();
    //    fireTableChanged(TableModelEvent event);
       //   fireTableRowsUpdated(1, 3);
    //    fireTableStructureChanged();
       }   public void insertRow(int row)
       {
           try
           {
            aResultSet.absolute(row);
               aResultSet.insertRow();
           }
           catch (SQLException ex) 
           {
           }
           fireTableRowsInserted(row, row);
       }   private ResultSet aResultSet = null;
       private ResultSetMetaData rsmt = null;}