resultset用法(使用java,用resultset获取数据库中的结果)

本文目录
- 使用java,用resultset获取数据库中的结果
- resultset方法
- 关于ResultSet
- 关于jdbc中ResultSet的next()方法
- ResultSet的first方法用法
- Java两个线程分别返回两个ResultSet,如何分多次读取两个ResultSet的结果
- ResultSet 中的getString()方法的用法
使用java,用resultset获取数据库中的结果
ResultSet
是一个迭代模式的动态连接容器。
迭代模式的容器遍历的时候通常是这样的
while(rs.next()){
//循环内容
}
rs.next()返回值是一个boolean,表示在迭代过程中是否已经到结尾。
直接从statement.excuteQuery()获得的rs默认数据游标在起始数据的前一个位置,调用一遍rs.next()才能指向可能有数据的第一条数据。然后遍历继续,直到迭代集合中再无数据rs.next()返回false;
ps:rs.getRow()表达的意思是结果集在当前游标下共存在多少列,不是rs的size()
在循环体中您将可以获得当前整行数据的各个列的值以及其它信息。
resultset方法
可以值么写,但是在你代码第三行之前得判断rs.first()返回值,为true才可以进行:rs.first()光标移动到此 ResultSet 对象的第一行,如果光标位于有效行,则返回 true;如果结果集中不存在任何行,则返回 false 。如果返回false,那么执行第三行将发生异常。
应该这样:
rs=sql.executeQuery(sql1);
if(rs.first()){
out.print(rs.getString(“jh“));
}else{
//没有附和条件的记录
}
关于ResultSet
ResultSet
rs
=
getStatement().executeQuery(sql);
//执行查询语句
rs.moveToInsertRow();
//移动游标到所要插的行!或者叫指针
rs.updateString(“Fcode“,
frmValue[i]);
//修改值
rs.updateString(“Fname“,
frmValue[i]);
rs.updateString(“FdescCode“,
frmValue[i]);
rs.updateString(“Ftype“,
frmValue[i]);
//执行所要修改的内容
rs.insertRow();
关于jdbc中ResultSet的next()方法
既然怀疑就查资料验证呗,看
JDK
API
最权威,这是JDK
API
中关于
ResultSet
的
next
函数详解,一目了然:
boolean
next()
throws
SQLException
将光标从当前位置向前移一行。ResultSet
光标最初位于第一行之前;第一次调用
next
方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。
当调用
next
方法返回
false
时,光标位于最后一行的后面。任何要求当前行的
ResultSet
方法调用将导致抛出
SQLException。如果结果集的类型是
TYPE_FORWARD_ONLY,则其
JDBC
驱动程序实现对后续
next
调用是返回
false
还是抛出
SQLException
将由供应商指定。
如果对当前行开启了输入流,则调用
next
方法将隐式关闭它。读取新行时,将清除
ResultSet
对象的警告链。
返回:
如果新的当前行有效,则返回
true;如果不存在下一行,则返回
false
抛出:
SQLException
-
如果发生数据库访问错误或在关闭的结果集上调用此方法
又API知道,next()方法一开始定位在第一行前面,所以用之前你的
next()
以下(一般入门人员很容易在这里出错)才能得到第一行数据,next到最后了会定位在最后一行的后面,不会自动回到第一行的。
ResultSet的first方法用法
要遍历 得到第一个结果集可以这个
if(rs.next()){
String firstResult = rs.getString(1);
}
当然字段类型你自己确定,或者是rs.getString(“字段名称“);
Java两个线程分别返回两个ResultSet,如何分多次读取两个ResultSet的结果
创建实体
ResultBean
private RsultSet resultSet;
private List《Bean》 resultList;
包含方法:
方法1:public List《Bean》 getResultList();每次将resultList清空后使用resultSet.next读取Bean再添加,判断是否遍历完毕,遍历完毕调用closeResultSet方法并返回null
方法2:public void closeResultSet();关闭ResultSet
2.建立一个单例工具类ResultUtil,包含以下私有成员
private Map《用户操作标识,ResultBean》 resultMap;
用户操作标识每次进入页面时随机生成一个且不可重复,后续点击加载都是使用页面初始化时使用的用户操作标识
方法1:public void pushResultBean(String 用户操作标识,ResultBean resultBean) ;添加ResultBean到resultMap中,key为用户操作标识;
方法2: public ResultBean getResultBean(String 用户操作标识) 根据用户操作标识取得ResultBean;
方法 3:public void removeResultBean(String 用户操作标识);通过用户操作标识remove
3.接口层
通过用户标识调用单例工具类的ResultUtil.getResultBean方法,通过得到的ResultBean再调用getResultList方法,当getResultList方法返回结果为空将调用ResultUtil.removeResultBean方法
4.前端
每次通过用户操作标识请求接口,得到响应结果追加即可
机优化方案:还需要ResultUtil中的resultMap回收,可以考虑使用websoket,或者心跳机制,想简单的话先用心跳机制解决,单独开一个接口,前端定时调用,如果超过三十秒该用户操作标识没有心跳检测调用ResultUtil.removeResultBean方法,若是用户体量大的话考虑使用netty
ResultSet 中的getString()方法的用法
1、getString:String getString(int columnIndex),throws SQLException以Java编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
2、1代表第一列。
例如:
columnIndex - 第一个列是1,第二个列是2,……
返回:
列值;如果值为SQL NULL,则返回值为null
抛出:
SQLException
扩展资料:
ResultSet 对象的用法:
ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。
可以生成可滚动和/或可更新的 ResultSet 对象。以下代码片段(其中 con 为有效的 Connection 对象)演示了如何生成可滚动且不受其他更新影响的、可更新的结果集。请参阅 ResultSet 字段以了解其他选项。
[pre]Statementstmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE)。
ResultSet rs = stmt.executeQuery(“SELECT a, b FROM TABLE2“); // rs will be scrollable, will not show changes made by others, // and will be updatable。
ResultSet 接口提供用于从当前行检索列值的获取方法(getBoolean、getLong 等)。可以使用列的索引编号或列的名称检索值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,而且每列只能读取一次。
对于获取方法,JDBC 驱动程序尝试将基础数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到供 ResultSet 获取方法使用的 Java 类型的映射关系。
用作获取方法的输入的列名称不区分大小写。用列名称调用获取方法时,如果多个列具有这一名称,则返回第一个匹配列的值。
参考资料来源:百度百科--ResultSet
参考资料来源:百度百科--Java 编程语言

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00









