首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

数据库读取有关问题!(高手来啊)

2012-01-10 
数据库读取问题!!!!!!!!!!!!!!(高手来啊)importjava.sql.Connectionimportjava.sql.ResultSetimportjava

数据库读取问题!!!!!!!!!!!!!!(高手来啊)
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类型
就是结果集的游标只能向下移

热点排行