import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTable;
import java.sql.*;
public class MainFrame extends JFrame { private JTable table;

public static Connection conn;
public static Statement stmtBank;
public static ResultSet rsBank;


String DBDriver="org.hsqldb.jdbcDriver";
String DBSource="jdbc:hsqldb:d:\\mydb";
String DBUser="sa";
String pwd="";

String sSql;
/**
 * Launch the application
 * @param args
 */
public static void main(String args[]) {
try {
MainFrame frame = new MainFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
 * Create the frame
 */
public MainFrame() {
super();

try{
Class.forName(DBDriver);
conn=DriverManager.getConnection(DBSource, DBUser, pwd);
}catch(SQLException ex){
ex.printStackTrace();
}catch(ClassNotFoundException ex){
ex.printStackTrace();
}

try{
stmtBank=conn.createStatement();
}catch(Exception ex){
ex.printStackTrace();
}

sSql="select * from bankacnt";

try{
rsBank=stmtBank.executeQuery(sSql);
}catch(SQLException ex){
ex.printStackTrace();
}


getContentPane().setLayout(null);
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); table = new JTable();
table.setBounds(10, 10, 472, 129);
getContentPane().add(table); final JButton btnok = new JButton();
btnok.setText("新 增");
btnok.setBounds(40, 269, 63, 25);
getContentPane().add(btnok);

String Content[][]=new String[0][6];
String[] Header={"col1","col2","col3","col4"};

int rowNum=0;
int total=0;
try{
rsBank.afterLast();
if(rsBank.previous())total = rsBank.getRow();
//Move back to the first record; 
rsBank.beforeFirst(); 

if (total!=0){ Content = new String[total][4];
while(rsBank.next())
{
Content[rowNum][0] = "" + rsBank.getString("acntNumber");
Content[rowNum][1] = "" + rsBank.getString("name");
Content[rowNum][2] = "" + rsBank.getString("companyname");
Content[rowNum][3] =""+  rsBank.getDouble("branchID");
rowNum++;
}
}
else
{
Content = new String[0][4];
Content[0][0] = " ";
Content[0][1] = " ";
Content[0][2] = " ";
Content[0][3] = " ";
}


}catch(SQLException ex){
ex.printStackTrace();
}

//
}}
程序运行到rsBank.afterLast();就出问题了。提示错误。
java.sql.SQLException: ResultSet was set to forward only
这是怎么回事啊。

解决方案 »

  1.   

    你都不能把这些去掉,好象是多余的
    rsBank.afterLast();
    if(rsBank.previous())total = rsBank.getRow();
    //Move back to the first record; 
    rsBank.beforeFirst(); if (total!=0){
    }这样后边的循环对rsBank遍历一次就可
      

  2.   

    创建Statement的语句改为以下形式:
    createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY )
    通过createStatement()创建的Statement默认为 ResultSet.TYPE_FORWARD_ONLY,只能从前往后读取结果集。
      

  3.   

    stmtBank=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);试试看,不知道 HSQLDB 支不支持。
      

  4.   

    rsBank.afterLast();
    if(rsBank.previous())total = rsBank.getRow();可以直接用以下语句替换:
    if(rsBank.last()) total = rsBank.getRow();
      

  5.   

    建议你这样试一试:创建Statement的语句改为以下形式:
    createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY )
    通过createStatement()创建的Statement默认为 ResultSet.TYPE_FORWARD_ONLY,只能从前往后读取结果集。
      

  6.   

    你定义的时候 用的默认ResultSet类型
    就是结果集的游标只能向下移