public class ResultSetModel extends AbstractTableModel
{
private String[] colNames = new String[0];
private ArrayList data = new ArrayList();
private ArrayList listeners = new ArrayList(); public void parseResultSet(ResultSet rs)
throws SQLException
{
data.clear(); ResultSetMetaData rmd = rs.getMetaData();
int colCount = rmd.getColumnCount();
colNames = new String[colCount];
for(int i=1; i<=colCount; i++)
colNames[i-1] = rmd.getColumnName(i);
while(rs.next())
{
String[] values = new String[colCount];
for(int col=1; col<=colCount; col++)
values[col-1] = rs.getString(col);
data.add(values);
}
fireTableStructureChanged();
}
public Class getColumnClass(int c)
{
return String.class;
} public int getColumnCount()
{
return colNames.length;
} public String getColumnName(int index)
{
return colNames[index];
} public int getRowCount()
{
return data.size();
} public Object getValueAt(int row, int col)
{
String[] values = (String[]) data.get(row);
return values[col];
} public boolean isCellEditable(int row, int col)
{
return false;
} public void clear()
{
data.clear();
colNames = new String[0];
fireTableStructureChanged();
}
} ResultSet rs = ... //query data from database ResultSetModel model = new ResultSetModel();
model.parseResultSet(rs);
JTable table = new JTable(model);
...
ResultSet rs1 = ... //another query
model.parseResultSet(rs1);
{
private String[] colNames = new String[0];
private ArrayList data = new ArrayList();
private ArrayList listeners = new ArrayList(); public void parseResultSet(ResultSet rs)
throws SQLException
{
data.clear(); ResultSetMetaData rmd = rs.getMetaData();
int colCount = rmd.getColumnCount();
colNames = new String[colCount];
for(int i=1; i<=colCount; i++)
colNames[i-1] = rmd.getColumnName(i);
while(rs.next())
{
String[] values = new String[colCount];
for(int col=1; col<=colCount; col++)
values[col-1] = rs.getString(col);
data.add(values);
}
fireTableStructureChanged();
}
public Class getColumnClass(int c)
{
return String.class;
} public int getColumnCount()
{
return colNames.length;
} public String getColumnName(int index)
{
return colNames[index];
} public int getRowCount()
{
return data.size();
} public Object getValueAt(int row, int col)
{
String[] values = (String[]) data.get(row);
return values[col];
} public boolean isCellEditable(int row, int col)
{
return false;
} public void clear()
{
data.clear();
colNames = new String[0];
fireTableStructureChanged();
}
} ResultSet rs = ... //query data from database ResultSetModel model = new ResultSetModel();
model.parseResultSet(rs);
JTable table = new JTable(model);
...
ResultSet rs1 = ... //another query
model.parseResultSet(rs1);
import suncertify.db.Data;
import suncertify.ui.Common;public class MyTableModel extends javax.swing.table.AbstractTableModel
implements java.awt.event.ActionListener
{
private Data DB=Data.getInstance();
private static MyTableModel myTableModel;
private int rowCnt;
private int columnCnt;
private int currentPageNO;
private int totalPage;
private String[] fieldNames;
private Object[][] content;
private int[] recNoArray;
private String[] filter;
private GenericSelectionPanel filterPanel;
private MyTableView tableView;
private MyTableModel()
{
init();
refreshData();
}
public static MyTableModel getInstance()
{
if (myTableModel==null)
{
myTableModel = new MyTableModel();
}
return myTableModel;
}
private void init()
{
rowCnt=Common.MODEL_ROW_COUNT;
columnCnt=DB.getColumnCount();
fieldNames=DB.getColumnNames();
currentPageNO=1;
filter = new String[columnCnt];
recNoArray=new int[Common.MODEL_ROW_COUNT];
}
public void refreshData()
{
content=getData((currentPageNO-1)*rowCnt,rowCnt);
this.fireTableDataChanged();
}
public void setColumnCount(int columnCount)
{
this.columnCnt = columnCount;
}
public void setColumnName(String names[])
{
fieldNames = names;
}
private void setTotalPageCount(int totalPage)
{
this.totalPage=totalPage;
}
public int getTotalPageCount()
{
return totalPage;
} private Object[][] getData(int startPos,int length)
{
Object[][] data=new Object[length][columnCnt];
try
{
int[] keyArray = DB.find(filter);
int total=keyArray.length/rowCnt+1;
if (keyArray.length%rowCnt==0)
total--;
setTotalPageCount(total);
if (startPos>=keyArray.length)
{
return data;
}
if (length>keyArray.length-startPos)
length=keyArray.length-startPos;
for(int i=0;i<length;i++)
{
recNoArray[i]=keyArray[startPos+i];
data[i] = DB.read(recNoArray[i]);
}
}catch(Exception ex)
{
ex.printStackTrace();
}
return data;
}
public int getRowCount()
{
return rowCnt;
}
public int getColumnCount()
{
return columnCnt;
}
public String getColumnName(int column)
{
return fieldNames[column];
}
public Object getValueAt(int row,int column)
{
return content[row][column];
}
public boolean isCellEditable(int row,int column)
{
return false;
}
public void setValueAt(Object value,int row,int column)
{
content[row][column] = value;
this.fireTableCellUpdated(row,column);
System.out.println(value+" has been modified!");
String[] record = new String[columnCnt];
for(int i=0;i<columnCnt;i++)
{
record[i] = (String) content[row][i];
}
try
{
DB.update(recNoArray[row], record);
}
catch(suncertify.db.exception.RecordNotFoundException e)
{
tableView.showWarningInfo("Update failer! the record you are editing has not been found!" );
}
//send data to server,and unLock it.
}
public int getCurrrentPageNO()
{
return currentPageNO;
}
public void setFilter(String[] filter)
{
this.filter = filter;
}
public void setFilterSelection(GenericSelectionPanel selection)
{
filterPanel = selection;
}
private void setFilterFieldContent(String[] filter,String[][] filterFieldContent)
{
for(int i=0;i<filterFieldContent.length;i++)
for(int j=0;j<columnCnt;j++)
{
if ( fieldNames[j].equalsIgnoreCase(filterFieldContent[i][0]) )
{
filter[j] = filterFieldContent[i][1];
break;
}
}
}
private String[] getProperFilter()
{
String[] filter = new String[columnCnt];
if (filterPanel instanceof AndNLSelectionPanel)
{
AndNLSelectionPanel panel = (AndNLSelectionPanel) filterPanel;
setFilterFieldContent(filter,panel.getFilterField());
}
else if (filterPanel instanceof OrNLSelectionPanel)
{
OrNLSelectionPanel panel = (OrNLSelectionPanel) filterPanel;
setFilterFieldContent(filter,panel.getFilterField());
}
return filter;
}
public void setTableView(MyTableView view)
{
tableView = view;
}
private int getSelectedRow()
{
return tableView.getSelectedRow();
}
public void actionPerformed(java.awt.event.ActionEvent e)
{
String command = e.getActionCommand();
System.out.println(command);
if (command.equals(Common.FIRST_PAGE))
{
currentPageNO=1;
}
else if (command.equals(Common.PRED_PAGE)&&(currentPageNO>1))
{
currentPageNO--;
}
else if (command.equals(Common.NEXT_PAGE)&&(currentPageNO<totalPage))
{
currentPageNO++;
}
else if (command.equals(Common.LAST_PAGE))
{
currentPageNO=totalPage;
}
else if (command.equals(Common.SEARCH))
{
filter = getProperFilter();
}
else if (command.equals(Common.OPERATION.BOOK_AND_UPDATE))
{
System.out.println("Selected row:"+getSelectedRow());
}
refreshData();
}
}
你可以去掉不相关代码,做个参考。
String block=jComboBox1.getSelectedItem().toString().trim();
opendb r=new opendb();
String sqlblock="select * from block where blockname='"+block+"'";
try{
ResultSet rs=r.dbstatement.executeQuery(sqlblock);
ResultSetModel model = new ResultSetModel();
model.parseResultSet(rs);
JTable table = new JTable(model);
rs.close();
}catch(Exception e1){}
}怎么不显示table啊?
ResultSetModel model = new ResultSetModel();
model.parseResultSet(rs);
JTable table = new JTable(model);
JDialog dlg = new JDialog(this, "result", true);
dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dlg.setSize(640, 480);
dlg.getContentPane().add(table);
dlg.setVisible(true);