//大意如此
private void refreshTable() {
MyTableModel model = (MyTableModel) table.getModel();
model.setRowData();
scrollPane.repaint();
}
private void refreshTable() {
MyTableModel model = (MyTableModel) table.getModel();
model.setRowData();
scrollPane.repaint();
}
model.insertRow(int row, Vector rowData);//or model.insertRow(int row, Object[] rowData)
table.setModel(model);
table.updateUI();
updateUI()是何意思啊?
但我的意思是说比例有增加、删除、修改等几个按钮,通过点击按钮对jtable进行操作,再保存到数据库中
不知大家是如何实现的?
1、关于更新Table,调用fireTableDataChanged()方法即可。
2、想通过Table中数据的变化来更新数据库,覆盖setValueAt(int,int,Object)即可,在setValue()方法内部你可以添加对数据库的操作,来更新你的数据库
但是代码很简单,应该对你有帮助。//只实现对数据库进行更新,没有实现插入功能
import javax.swing.table.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;
import java.io.*;
public class DBTableModel extends AbstractTableModel{ int row=0;
int column=0;
String[] columnNames = null;
String[] columnTypes = null; ArrayList valueList = new ArrayList(); //int resultSetType ;
ResultSet rSet = null;
Connection con = null;
String tableName = null;
boolean isReadOnly = true; public DBTableModel(ResultSet rs){
setResultSet(rs);
} public DBTableModel(Connection c,String table){
try {
setConnection(c,table);
}
catch (Exception ex) {
ex.printStackTrace();
}
} public int getRowCount(){
return row;
} public int getColumnCount(){
return column;
} public Object getValueAt(int r,int c){
return ((Object[])valueList.get(r))[c];
} public String getColumnName(int c){
return columnNames[c];
} public void setValueAt(Object v,int r,int c){
if(r>row || c>column || r<0 || c<0){
return;
}
if(((Object[])valueList.get(r))[c] != null
&& ((Object[])valueList.get(r))[c].equals(v)){
return;
}
if (!isReadOnly) {
try {
Statement stmt = con.createStatement();
Object[] o = this.getRow(r);
String columnName = columnNames[c];
String va = getSQL(v,columnTypes[c]);
String cd = " where ";
for(int i=0;i<o.length;i++){
if(i != c){
if (i+1 != o.length ) {
cd += columnNames[i]+"="+getSQL(o[i],columnTypes[i])+" And ";
}
else {
cd += columnNames[i]+"="+getSQL(o[i],columnTypes[i]);
}
}
}
if(c+1 == o.length){
cd = cd.substring(0,cd.lastIndexOf("And"));
}
String sql = "update "+tableName+" set "+columnName+"="+va+cd;
System.out.println(sql);
stmt.executeUpdate(sql);
stmt.close();
((Object[])valueList.get(r))[c] = v;
//fireTableDataChanged();
}
catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null,ex,"Error",JOptionPane.ERROR_MESSAGE);
}
}
} public boolean isCellEditable(int r,int c){
return !isReadOnly;
} /**
*
* @return
*/
public boolean addRow(){
System.err.println("Not support yet");
//fireTableStructureChanged();
return false;
} /**
*
* @param name
* @return
*/
public boolean addColumn(String name){
System.err.println("Not support yet");
/*if(name.equals("") || name == null){
name = "NULL";
}
fireTableStructureChanged();*/
return false;
} /**
*
* @param b
*/
public void setReadOnly(boolean b){
isReadOnly = b;
fireTableStructureChanged();
}
void setResultSet(ResultSet rs){
try{
//resultSetType = rs.getType();
rSet = rs;
initColumnNameAndType(rs);
initDatas(rs);
fireTableStructureChanged();
fireTableDataChanged();
}
catch(SQLException e){
e.printStackTrace();
}
} void setConnection(Connection c,String table)throws Exception{
if(c == null){
return;
}
isReadOnly = false;
con = c;
tableName = table;
Statement stmt = c.createStatement();
setResultSet(stmt.executeQuery("select * from "+table));
stmt.close();
} private void initColumnNameAndType(ResultSet rs) throws SQLException{
ResultSetMetaData dbmd = rs.getMetaData();
column = dbmd.getColumnCount();
columnNames = new String[column];
columnTypes = new String[column];
for(int i=0;i<column;i++){
columnNames[i] = dbmd.getColumnName(i+1);
columnTypes[i] = dbmd.getColumnTypeName(i+1);
}
} private void initDatas(ResultSet rs) throws SQLException{
this.rSet = rs;
int index = 0;
valueList.clear();
while(rs.next()){
Object[] rowValues = new Object[column];
for(int i=0;i<column;i++){
try{
rowValues[i] = rs.getObject(i+1);
}catch(ArrayIndexOutOfBoundsException ee){
ee.printStackTrace();
}
}
valueList.add(index,rowValues);
index++;
}
row = valueList.size();
} private Object[] getRow(int r){
if (r<0 || r>row) {
return null;
}
else{
return (Object[])valueList.get(r);
}
} private String getSQL(Object o,String type){
String v = "";
System.out.println(type);
if(type.equalsIgnoreCase("INT") || type.equalsIgnoreCase("integer")){
v += o;
}
else if(type.equalsIgnoreCase("smallint")){
v += o;
}
else if(type.equalsIgnoreCase("Long")){
v += o;
}
else if(type.equalsIgnoreCase("Double")){
v += o;
}
else if(type.equalsIgnoreCase("Float")){
v += o;
}
else if(type.equalsIgnoreCase("Byte")){
v += o;
}
else if(type.equalsIgnoreCase("Short")){
v += o;
}
else if(type.equalsIgnoreCase("Bigint")){
v += o;
}
else if(type.equalsIgnoreCase("Counter")){
v += o;
}
else if(type.equalsIgnoreCase("blob") || type.equalsIgnoreCase("clob")){
v = "'"+o+"'";
}
else {
v = "'"+o+"'";
}
return v;
}
}