rs.last()方法不可用,学习ResultSet游标

int RowCount = 0;
rs.last();
RowCount= rs.getRow(); //移动到最后,检索当前行编号,获取总行数 。
rs.beforeFirst(); //便于后面输出数据

执行到rs.last()时候就提示不支持这个方法!
Unsupported method: ResultSet.last 

 

=============================游标只读向前================================
java.sql
接口:Connection
方法:createStatement
Statement createStatement()
               throws SQLException
创建一个 Statement 对象来将 SQL 语句发送到数据库。
没有参数的 SQL 语句通常使用 Statement 对象执行。
如果多次执行相同的 SQL 语句,使用 PreparedStatement 对象可能更有效。
使用返回的 Statement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,
并带有 CONCUR_READ_ONLY 并发级别。[---注意这里,默认是只读向前的游标]

返回:
一个新的默认 Statement 对象
抛出:
SQLException - 如果发生数据库访问错误

===========================游标自定义======================================
java.sql
接口:Connection
方法:createStatement
Statement createStatement(int resultSetType,
                            int resultSetConcurrency)
                            throws SQLException
创建一个 Statement 对象,该对象将生成具有

给定类型和并发性的 ResultSet 对象。此方法与上述 createStatement 方法相同,但它允许重写

默认结果集类型和并发性。

参数:
resultSetType - 结果集类型,它是
---ResultSet.TYPE_FORWARD_ONLY、 //游标向前
---ResultSet.TYPE_SCROLL_INSENSITIVE 或 //该常量指示可滚动但通常不受其他的更改影响的rs类型
---ResultSet.TYPE_SCROLL_SENSITIVE 之一//常量指示可滚动并且通常受其他的更改影响的rs类型。

resultSetConcurrency - 并发类型;它是
---ResultSet.CONCUR_READ_ONLY 或     //只读
---ResultSet.CONCUR_UPDATABLE 之一 //可以修改
返回:
一个新的 Statement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象
抛出:
SQLException - 如果发生数据库访问错误,或者给定参数不是指示类型和并发性的 ResultSet 常量
从以下版本开始:
1.2

解决办法:

在创建Statement对象时,指定游标参数
conn = DriverManager.getConnection(getConnectionUrl(),dbUserName,dbPassword);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

21:08:05 RandomGetRecord. java↵ import java. sql.*;↵ import java. util.*;↵ public class RandomGetRecord {↵ public static void main(String args[]){↵ int wantRecordAmount=10;随机抽取的记录数目↵ Random random=new Random();↵ try{ 【代码1】//加载JDBC-ODBC桥接器↵ }< catch(ClassNotFoundException e){↵ System. out. print(e);↵ }. Connection con;↵ Statement sql;↵ ResultSe t rs;↵ 21:09:00 try{ String uri="jdbc:odbc:dataSource";↵ String id="";↵ String password=””;↵ con=DriverManager. getConnection(uri, id, password);↵ sql= con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,↵ ResultSet.CONCUR_READ_ONLY);↵ rs=【代码2】//sql调用. executeQuery方法查询goods表中的全部记录↵ rs. last(); /将rs游标移到rs的最后一行↵ _ int count=rs. getRow(); Vector<Integer>vector=new Vector<Integer>0;↵ for(int i=1;i<=count;i++) { ↵ vector. add(new Integer(i));↵ } ↵ int itemAmount=Math . min(wantRecordAmount, count);↵ System. out. println("随机抽取"+itemAmount+"条记录.");↵ double sum =0,n=itemAmount;↵ while(itemAmount>0){↵ int randomIndex =random. nextInt(vector. size());↵ int index=(vector. elementAt(randomIndex)). intValue();↵ 【代码3】//将rs游标游标移到index↵ String number =rs. getString(1);↵ String name=rs. getString(2);↵ java. util. Date date=rs. getDate(3);↵ double price=rs. getDouble(4);↵ sum=sum+price;↵ itemAmount--; vector. removeElementAt(randomIndex);↵ } con. close();↵ double aver=sum/n;↵ System. out. println("均价:"+aver+"元");↵ } catch(SQLException e){↵ 21:10:55 System.out.println(“”+e);
最新发布
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值