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对象
麻烦高手将关键的代码告诉我
不胜感激!!!
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对象
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;}