以下是我的程序,,请指教哈~~
读出来的时候只是重复写了数据库中的最后一条记录import java.io.*;
import java.util.*;
import javax.swing.table.*;
import java.sql.*;class  Selector extends AbstractTableModel
{
ConnectDB connect = new ConnectDB();
String sql="select * from T_hsw_sale";
private ResultSet rs = connect.executeQuerySale(sql);
String id;
String name;
String area;
String address;
String price;
String guessName;
String doDate;

Selector() 
{
try{
   while(rs.next())
   {
id=rs.getString(1);
    name=rs.getString(2);
    area=rs.getString(3);
    address=rs.getString(4);
    price=rs.getString(5);
    guessName=rs.getString(6);
    doDate=rs.getString(7);
   }
      }
    catch(SQLException e){
     System.out.println(e);
      }
    connect.close(); 
} public int getRowCount(){
return Integer.parseInt(this.id);
}
public int getColumnCount(){
return 7;
}
public Object getValueAt(int row, int column){
//这里应该填什么呢?
    switch(column)
{
case 0: return id;
case 1: return name;
case 2: return area;
case 3: return address;
case 4: return price;
case 5: return guessName;
case 6: return doDate;
default :return "";
   }
  
}
public String getColumnName(int column){
switch (column)
  {
       case 0: return "序号";
   case 1: return "户型";
   case 2: return "面积";
   case 3: return "位置";
   case 4: return "买卖价";
   case 5: return "客户名";
   case 6: return "受理日期";
   default:return  "";
       
  }
   
}

 }

解决方案 »

  1.   

    switch语句特别要注意break啊...
    改成这样:
    switch(column)
    {
    case 0: return id;break;
    case 1: return name;break;
    case 2: return area;break;
    case 3: return address;break;
    case 4: return price;break;
    case 5: return guessName;break;
    case 6: return doDate;break;
    default :return "";
       }
    下面的那个也要改:
    switch (column)
      {
           case 0: return "序号";
           case 1: return "户型";break;
       case 2: return "面积";break;
       case 3: return "位置";break;
       case 4: return "买卖价";break;
       case 5: return "客户名";break;
       case 6: return "受理日期";break;
       default:return  "";
           
      }
    你没有写break的话,后面把前面覆盖掉,只会显示最后一条.
      

  2.   

    不是这个问题哦,用了return就是已经跳出了这个语句,不需要再用break。。问题
    我想应该是出现在我做了注释那个地方吧。。就是getValueAt()那里,再仔细看看啊,,谢谢!
      

  3.   

    不明白楼主的意思
    楼主想把取出来的数据怎么处理?显示在gui的什么组建里?
      

  4.   

    我贴个片断给你参考,java程序连接mysql的,可从数据库读出数据显示在JTable final JDBCconn trytry = new JDBCconn();
        trytry.setClassName("org.gjt.mm.mysql.Driver");
        trytry.setUrl("jdbc:mysql://0.0.0.0:3306/try?useUnicode=true&characterEncoding=gbk");
        trytry.setUid("root");
             trytry.setPwd("ga");
             trytry.JDBCconnect();
                 trytry.setExecuteQuery("select * from test2");
             trytry.JDBCexecQuery();        String[] columnNames=trytry.conn.getColumnNames();
            Object[][] cells = trytry.conn.getValuesOfTable();
            final DefaultTableModel tableModel_mx= new DefaultTableModel(cells,columnNames);
            
            final JTable table = new JTable(tableModel_mx);
    ---------------------------------------------------//trytry.conn.getValueOfTable():   public Object[][] getValuesOfTable(){
         Object[][] temp=new Object[this.getRowCount()][this.getColumnCount()];
         for(int i=0;i< this.getRowCount(); i++){
           for(int j=0;j<this.getColumnCount(); j++){
            temp[i][j]=getValueAt(i,j);
           }
        
          }
         return temp;
         }
        
     public Object getValueAt(int aRow, int aColumn) {
            Vector row = (Vector)rows.elementAt(aRow);
            return row.elementAt(aColumn);
        }//rows 是 what:rows = new Vector();
                while (resultSet.next()) {
                    Vector newRow = new Vector();
                    for (int i = 1; i <= getColumnCount(); i++) {
                newRow.addElement(resultSet.getObject(i));
                    }
                    rows.addElement(newRow);
                }
      

  5.   

    看看以下的方法行不行,这里的rs=trytry.setExecuteQuery("select * from test2");
    楼主自己琢磨琢磨,我也是来这里学习的,嘿嘿。
    public void displayResultSet(ResultSet rs) throws SQLException {
    Vector columnHeads = new Vector();
    Vector rows = new Vector();
    if (rs.next()) {
    try {
    // 获取数据库字段的名称
    ResultSetMetaData rsmd = rs.getMetaData();
                                        for(int i=1;i<=rsmd.getColumnCount();i++)
    columnHeads.addElement(rsmd.getColumnClassName(i)); // 获取数据库中的记录集
    do {
    rows.addElement(getNextRow(rs, rsmd));
    } while (rs.next());
    // 在表格中显示查询结果
    table = new JTable(rows, columnHeads);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    JScrollPane scroller = new JScrollPane(table);
    Container container = getContentPane();
    //container.remove(2);
    container.add(scroller, BorderLayout.CENTER);
    container.validate(); // 刷新Table
    } catch (SQLException sqlex) {
    sqlex.printStackTrace();
    }
    } else {
    JOptionPane.showMessageDialog(this, "无数据显示", "信  息",
    JOptionPane.INFORMATION_MESSAGE);
    }
    } public Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd)
    throws SQLException {
    Vector currentRow = new Vector();
    for (int i = 1; i <= rsmd.getColumnCount(); ++i)
    currentRow.addElement(rs.getString(i));
    // 返回一条记录
    return currentRow;
    }
      

  6.   

    问题出在这里,你的getValueAt(int i, int j)方法中返回的以下变量:
    String id;
    String name;
    String area;
    String address;
    String price;
    String guessName;
    String doDate;
    在构造方法中,按记录顺序依次赋值为结果集中的各条记录的1至7字段的值,后面的把前面的覆盖掉了(就是这个地方不对)。
    要想解决这个问题,需要把每个字段在各行的返回值都存储起来,换句话说,就是得用Array或者List这些数据结构来存储。返回的时候再根据数据所处行数返回具体某一行的某一列数据。
      

  7.   

    PS:给你一段源码你看看吧……
    // TableModel.java
    import java.sql.*;
    import javax.swing.table.*;public class TableModel extends AbstractTableModel {   public String[] columnNames = null;
       
       public Object[][] values = null;
       
       public boolean isInited = false;
       
       /** Creates a new instance of TableModel */
       public TableModel() {
          isInited = true;
       }
       
       public TableModel(String sqlQuery) {
          ConnectDB conn = new ConnectDB();
          try {
             ResultSet rs = conn.executeQuery(sqlQuery);
             ResultSetMetaData rsmd = rs.getMetaData();
             int cols = rsmd.getColumnCount();
             int rows = conn.rowCount(rs);         columnNames = new String[cols + 1];
             columnNames[0] = "";
             for (int i = 0; i < cols; i++){
                columnNames[i + 1] = rsmd.getColumnName(i + 1);
             }
             values = new Object[rows][columnNames.length];
             for (int i = 0; i < rows; i++){
                rs.next();
                for (int j = 0; j < cols + 1; j++) {
                   if (j == 0) {
                      values[i][j] = (new Integer(i + 1)).toString() + " ";
                   } else{
                      values[i][j] = rs.getObject(j);
                      if (values[i][j] == null){
                         values[i][j] = (Object)"";
                      }
                   }
                }
             }
             isInited = true;
             return;
          } catch (SQLException sqle) { 
             System.out.print(sqle.getMessage());
          } catch (NullPointerException npe){
             System.out.print(npe.getMessage());
          }
          isInited = false;
          return;
       }
       
       public int getRowCount() {
          return values.length;
       }
       
       public int getColumnCount() {
          return values[0].length;
       }
       
       public Object getValueAt(int rowIndex, int columnIndex) {
          return values[rowIndex][columnIndex];
       }
       
       public String getColumnName(int columnIndex) {
          return columnNames[columnIndex];
       }
       
       public void setValueAt(int rowIndex, int columnIndex, Object obj) {
          values[rowIndex][columnIndex] = obj;
       }
    }
    // ConnectDB.java
    import java.net.*;
    import java.sql.*;
    import java.io.*;
    import java.util.*;public class ConnectDB {   Connection con;
       ResultSet rs;
       Statement stmt;
       final String filename = "conn.properties";
       String IP = "192.168.0.4";
       String database = "database";
       String username = "sa";
       String password = "password";
       String url = "jdbc:microsoft:sqlserver://" + IP +
                    ":1433;DatabaseName=" + database;   
       /** Creates a new instance of ConnectDB */
       public ConnectDB() {
       }   public ResultSet executeQuery(java.lang.String sql) {
          rs = null;
          try{  
             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
          }catch(java.lang.ClassNotFoundException e) {
             System.out.println("Class not found!!");
             System.out.println(e.getMessage());
          }
          
          try {
             con = DriverManager.getConnection(url, username, password);
             stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                   ResultSet.CONCUR_UPDATABLE);
             rs = stmt.executeQuery(sql);
          }catch(SQLException sqle) {
             System.err.println("Unable to connect");
             sqle.printStackTrace();
             return null;
          }
          return rs;
       }   public int executeUpdate(java.lang.String sql) {
          int num = 0;
          try {
             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
          } catch(java.lang.ClassNotFoundException e) {
             System.out.println("Class not Found!!");
             System.out.println(e.getMessage());
          }
          
          try { 
             con = DriverManager.getConnection(url,username,password);
             stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                   ResultSet.CONCUR_UPDATABLE);
             num = stmt.executeUpdate(sql);
          } catch(SQLException sqle) {
             System.err.println("Unable to connect");
             sqle.printStackTrace();
          }
          return num;
       }
       
       public void close() throws SQLException {
          try {
             System.out.println("Closing db connection");
             rs.close();
             stmt.close();
             con.close();
          } catch(SQLException sqle) {
              System.err.println("Unable to disconnect");
              sqle.printStackTrace();
          }
          System.out.println("Closed db connection"); 
       } 
       
       public int rowCount(ResultSet rst) {
          int rowc = 0;
          int rowNum;
          try{
             rowNum=rst.getRow();
             rst.last();
             rowc=rst.getRow();
             if(rowNum==0) {
                rst.beforeFirst();
             } else {
                rst.absolute(rowNum);
             }
          } catch(Exception e) {
             System.out.println(e.getMessage());
          }    
          return rowc;
       }
       
       public static void main(String[] args) throws SQLException {
          ConnectDB conn = new ConnectDB();
          String sqlQuery = "SELECT * FROM test";
          ResultSet rs = conn.executeQuery(sqlQuery);
          while (rs.next()) {
             System.out.println("" + rs.getRow() + ":\t" + rs.getString(1));
          }
          rs.close();
       }
    }
      

  8.   

    楼主的程序只能得到一条记录。是resultset的最后一条保存起来了。楼主需要建一个bean存放数据,然后把数据放到array或者arraylist或者vector