今天想做个直接在JTable进行批量修改的东西,就试验下,但是很无奈的发生了下面的问题:
  
  例如:我用JTable获取数据库信息后,将其用分页显示共2页,然后我点击更改按钮就将当前页(第一页)JTable的值传给数据库,问题发生在本页(第一页)最后一行,如果我执行sql语句就死,其他行没有关系。  部分代码如下:
/**********************点击按钮发生的方法***************/
void update(){
int scount = table.getRowCount(); // 获取JTable总行数(当前页)
String sid = "";   
String cin = "";   
String sgrade = ""; 
String sql;
ConnectServer.conn("jdbc:odbc:wsouto", "sa", "1234");
Statement stmt;
try { stmt = ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);        // 这个是连接数据库的类引来的 for(int i = 0;i<scount;i++){
sid =(String)table.getValueAt(i,0);// 获取JTable第一列的数据 cin = (String)table.getValueAt(i,1);// 获取JTable第二列的数据 sgrade = (String)table.getValueAt(i,2);// 获取JTable第三列的数据 sql = "update Grade set grade ='"+sgrade.trim()+ "' where Grade.StudentID = '" + sid.trim() +"'and Grade.CourseID = '"+ cin.trim() +"'";     //执行修改
stmt.executeUpdate(sql);  //  无奈的最后一行 }/**************************更新当前页*******************/
void initTable() {
dtm.setRowCount(0); // 清空模型中的数据
try {
rs.beforeFirst(); // 记录指针移到首记录之前
for (int i = 1; i < 1 + pagesize * (page - 1); i++)
// 将指针移到本页的第一个记录
rs.next();
int j = 0;
while (j < pagesize && rs.next()) { // 循环,直到读完本页的记录或记录已经读完
j++;
Vector<String> v1 = new Vector<String>(); // 建立行向量
for (int i = 1; i <= title.size(); i++)
// 将当前记录的各列添加到行向量
v1.addElement(rs.getString(i));
dtm.addRow(v1); // 将行向量添加到数据模型
}
} catch (SQLException e) {
e.printStackTrace();
}
dtm.fireTableStructureChanged(); // 通知所有的listener,表格的结构已经改变
}
/***************************分页的部分操作*************/count = getcount();//从数据库中获取一共有多少行
pagecount = (int) count / pagesize
+ (count % pagesize == 0 ? 0 : 1);//计算出页数
ResultSetMetaData dbmd = rs.getMetaData(); // 获得表的元数据
for (int i = 1; i <= dbmd.getColumnCount(); i++)
title.addElement(dbmd.getColumnName(i)); // 将列名填入表头向量
dtm = new DefaultTableModel(null, title); // 建立默认的表格数据模型
table = new JTable(dtm);
/*******************End*****************************/问题就是这个样子,只要是“非最后页”的“最后一行”数据更新数据库就死了。我用调试追踪了下,就是执行到stmt.executeUpdate(sql); 就死了,就没有办法继续跟踪了。哈哈,帮我解决下吧。无奈中..............