为何在bean中连接数据库后不能用first(),last() package sysbean;
import java.sql.*;
import java.util.*;
import java.text.*;
import java.io.*;
public class jdbc_sql
{
private String servername="hyserver";
private String prot="1433";
private String dataname="hy_info";
private String dbusername="sa";//----------- datebase login username
private String dbpassword="";//------------ datebase login password
private Connection conn=null;
private Statement stmt=null;
ResultSet rs=null; public jdbc_sql(){}public Connection j_conn()
{
try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");}catch(java.lang.ClassNotFoundException e)
{System.err.println("Class.forName is error():"+e.getMessage());}try {
conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://"+getservername()+":"+getprot()+";DatabaseName="+getdataname(),dbusername,dbpassword);
}
catch(SQLException ex)
{System.err.println("DrisverManage.getConnection is error():"+ex.getMessage());}
return this.conn;
}public void setservername(String str) {this.servername=str;}
public void setprot(String str) {this.prot=str;}
public void setdataname(String str) {this.dataname=str;}
public void setdbusername(String str) {this.dbusername=str;}
public void setdbpassword(String str) {this.dbpassword=str;}public String getservername() { return (this.servername); }
public String getprot() { return (this.prot); }
public String getdataname() { return (this.dataname); }
public String getdbusername() { return (this.dbusername); }
public String getdbpassword() { return (this.dbpassword); }//---------------------数据库查询-----------------
public ResultSet query(String sql)
{
try{
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
System.out.print("Query ok! ");
}
catch(SQLException ex) {System.err.println("query():"+ex.getMessage());}
return rs;
}==========================================
以上为bean 内容,
在jsp里面这样用的:ResultSet rs=aaa.query("select username from abc"); // aaa为bean 的id
若表内有10条记录
rs.next();
System.out.println(rs.getString(1));
rs.close();
这种写法能通过
-------------------------
rs.first(); // 报错的地方!
System.out.println(rs.getString(1));
------------------------------
rs.last(); //报错!
System.out.println(rs.getString(1));===================================================
请问这种情况如何解决啊。小弟在线等,马上给分!
import java.sql.*;
import java.util.*;
import java.text.*;
import java.io.*;
public class jdbc_sql
{
private String servername="hyserver";
private String prot="1433";
private String dataname="hy_info";
private String dbusername="sa";//----------- datebase login username
private String dbpassword="";//------------ datebase login password
private Connection conn=null;
private Statement stmt=null;
ResultSet rs=null; public jdbc_sql(){}public Connection j_conn()
{
try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");}catch(java.lang.ClassNotFoundException e)
{System.err.println("Class.forName is error():"+e.getMessage());}try {
conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://"+getservername()+":"+getprot()+";DatabaseName="+getdataname(),dbusername,dbpassword);
}
catch(SQLException ex)
{System.err.println("DrisverManage.getConnection is error():"+ex.getMessage());}
return this.conn;
}public void setservername(String str) {this.servername=str;}
public void setprot(String str) {this.prot=str;}
public void setdataname(String str) {this.dataname=str;}
public void setdbusername(String str) {this.dbusername=str;}
public void setdbpassword(String str) {this.dbpassword=str;}public String getservername() { return (this.servername); }
public String getprot() { return (this.prot); }
public String getdataname() { return (this.dataname); }
public String getdbusername() { return (this.dbusername); }
public String getdbpassword() { return (this.dbpassword); }//---------------------数据库查询-----------------
public ResultSet query(String sql)
{
try{
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
System.out.print("Query ok! ");
}
catch(SQLException ex) {System.err.println("query():"+ex.getMessage());}
return rs;
}==========================================
以上为bean 内容,
在jsp里面这样用的:ResultSet rs=aaa.query("select username from abc"); // aaa为bean 的id
若表内有10条记录
rs.next();
System.out.println(rs.getString(1));
rs.close();
这种写法能通过
-------------------------
rs.first(); // 报错的地方!
System.out.println(rs.getString(1));
------------------------------
rs.last(); //报错!
System.out.println(rs.getString(1));===================================================
请问这种情况如何解决啊。小弟在线等,马上给分!
用缺省设置创建时,ResultSet 是一种只能访问一次(one-time-through)、只能向前访问(forward-only)和只读的对象。您只能访问数据一次,如果再次需要该数据,必须重新查询数据库。然而,并不只有这一种方式。通过设置 Statement 对象上的参数,您可以控制它产生的 ResultSet。例如:...
Class.forName(driverName);
db = DriverManager.getConnection(connectURL);
Statement statement = db.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE
);
String orderElName = xmlfileEl.getElementsByTagName("order").item(0)
.getFirstChild().getNodeValue();
...这个 Statement 现在将产生可以更新并将应用其他数据库用户所作更改的 ResultSet。您还可以在这个 ResultSet 中向前和向后移动。第一个参数指定 ResultSet 的类型。其选项有:TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 一样,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。
第二个参数设置 ResultSet 的并发性,该参数确定是否可以更新 ResultSet。其选项有:CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
CONCUR_UPDATABLE:指定可以更新 ResultSet
stmt.setFetchDirection(ResultSet.FETCH_UNKNOWN);
rs= ....