数据库读取问题!!!!!!!!!!!!!!(高手来啊)
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
这是怎么回事啊。
[解决办法]
你都不能把这些去掉,好象是多余的
rsBank.afterLast();
if(rsBank.previous())total = rsBank.getRow();
//Move back to the first record;
rsBank.beforeFirst();
if (total!=0){
}
这样后边的循环对rsBank遍历一次就可
[解决办法]
创建Statement的语句改为以下形式:
createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY )
通过createStatement()创建的Statement默认为 ResultSet.TYPE_FORWARD_ONLY,只能从前往后读取结果集。
[解决办法]
stmtBank=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
试试看,不知道 HSQLDB 支不支持。
[解决办法]
rsBank.afterLast();
if(rsBank.previous())total = rsBank.getRow();
可以直接用以下语句替换:
if(rsBank.last()) total = rsBank.getRow();
[解决办法]
lipinxin(Parson) 说的是对的
[解决办法]
建议你这样试一试:
创建Statement的语句改为以下形式:
createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY )
通过createStatement()创建的Statement默认为 ResultSet.TYPE_FORWARD_ONLY,只能从前往后读取结果集。
[解决办法]
你定义的时候 用的默认ResultSet类型
就是结果集的游标只能向下移