当前位置:首页 » 数据仓库 » 数据库resultset
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库resultset

发布时间: 2023-03-30 09:19:02

㈠ 为什么在查询数据库得到结果是不能用LIST直接接受而是要用ResultSet现接受

可以这么理解,ResultSet是包含数据库连接的,在得到ResultSet以后其实里面并没有数据,而只是返回了指向数据的指针,这样的话性能上相当于多了一级缓存,当你用next()方法移动指针的时候才开始读,只需要取你需要的数据,而不用把所有数据都一次性装入list里。
上面只是一个方面,另一方面,除了基本的ResultSet用法,在查询语句满足一定条件的情况下ResultSet还可以直接更前宴新数据库里的数据慧如银,而直接返回list是做不到的。
所以可以看出返回ResultSet比list更加灵活,作为一个底层的方法灵活性是很重要的,如果不需要用到这么多的功能,程序员可以橡缺自己封装一层返回list也很简单,这也是java的优点啊

㈡ ResultSet怎么获取数据库中的最后一行记录的第一个字段

获得ResultSet的记录个数:
因为ResultSet没有方法可直接得消誉中到虚手记录数,只有另想方法,可采用拿山如下方法:
Statement stmt = db.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql);
rs.last();//移到最后一行
int count = rs.getRow();
rs.beforeFirst();//移到初始位置

㈢ 如何获取ResultSet的行数和列数

当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数。我们知道它的列数可以通过resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口。
这个时候,有三个办法可以解决:
1.改用select count语句,然后直接从ResultSet里面获取结果:try{Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select count(*) as rowCount from tableName");
resultSet.next();introwCount = resultSet.getInt("rowCount");}catch(Exception e) {//TODO: handle exception
e.printStackTrace();}但庆斗是,我们执行数据库查询不光要知道结果的行数,往往接下来还要用到查询结果。如果用此方法,还需要再执行一次select语句,才能得到想要的结果集,这样,就多了一次数据库查询,大大降低了执行速度。
2.遍历Resultset,用一个变量记录行数。代码如下:intcount = 0;try{while(resultSet.next()){
count = count + 1;}}catch(SQLException e1) {//TODO Auto-generated catch block
e1.printStackTrace();}这样获取的count值就是结果集的行数。然而,这种方法同第一种方法的问题一样,不能再使用结果集了。因为这时候指针已经移动到结果集的外面了,不再指向任何记录。
3.知道了第二种方法中问题的原因,我们就知道如何更好地解决这个问题了。第二种方法的问题在于返回的结果集中的指针不能自由移动,幸好java为我们提供了选择,可以让我们创建指针可以自由移动的结果集,所需要做的只有一件事,就是在创建Statement的时候,加上两个参数:try{//Statement statement = connection.createStatement();
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = statement.executeQuery("select * from " + tableName);}catch(Exception e) {//TODO: handle exception
e.printStackTrace();}这样获得的结果集,指针就可以誉颂磨在其中自由移动。然后,就可以用如下方法获取结果集的行数:introwCount = 0;try{resultSet.last();
rowCount = resultSet.getRow();}catch(Exception e) {//TODO: handle exception
e.printStackTrace();}其中resultSet.last()就是将指针移动到结果集的最后一条记录;然后用resultSet.getRow()获取指针当前所在的行号(从1开始)
如果接下来你还要使用结果集,别忘了将指针移到第一行:
resultSet.first();
既然结果集是可滚动的,当然可以用absolute()方法访问指定行樱备号的记录:
其中row参数可正可负,具体含义查一下ResultSet的absolute()方法就知道了。

㈣ java数据库操作,老是提示ResultSet已关闭

在默认情况下,同一时间每个
Statement
对象在只能打开一个
ResultSet
对象。因此,如果读取一个
ResultSet
对象与读取另一个交叉,则这两个对象必须是由不同的
Statement
对象生成的。如果存在某个语句的打开的当前
ResultSet
对象,则
Statement
接口中的所有执行方法都会隐式关闭它。
你的delRecord方法里,rs开始由executeQuery得到,然后在while循环内,又执行了executeUpdate,所以rs被关闭,在执行rs.isAfterLast()时出现异常。。
rs=sql.executeQuery("select
*
from
message");
while(rs.next()){
if(this.number.equals(rs.getString(1).trim()))
{
sql.executeUpdate("delete
from
message
where
number='"+this.number+"'");
break;
}
}

㈤ 请教高手关于数据库中用尽的ResultSet的问题:

用Statement st=conn.createStatement();的话
默认是与Statement st=conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);

如果想要用rs.last()等方法的话,得设置ResultSet为允许滚脊早动(scrollable),即:
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

当然,也可以用:
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

TYPE_SCROLL_INSENSITIVE 和 TYPE_SCROLL_SENSITIVE的镇禅区别是:
前者不会理会其他程序对ResultSet所做的变动,而樱旅雀后者会实时更新其他程序造成的ResultSet变动

㈥ java数据库操作,老是提示ResultSet已关闭

/*
* 直接给你写了一个工具类,拿去用就行了
* */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Database {

private static Connection conn;
private static Statement stm;
private static ResultSet rs;

private static final String url = "jdbc:sqlserver://127.0.0.1:1433;Database=test";
private static String user = "test";
private static String password = "123456";

public static Connection getConnection() throws SQLException {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return DriverManager.getConnection(url, user, password);
}

public static Statement getStatement() throws SQLException{
conn = getConnection();
stm = conn.createStatement();
return stm;
}

public static ResultSet executeQuery(String sql) throws SQLException{
rs = getStatement().executeQuery(sql);
return rs;
}

public static ResultSet executeQueryById(String id) throws SQLException{
String sql = "select * from message where number=";
rs = getStatement().executeQuery(sql+id);
return rs;
}

public static void del(String id) throws SQLException{
String sql = "delete from message where number=";
getStatement().executeUpdate(sql+id);
}

public static void close(){

try {
if(conn != null) conn.close();
if(stm != null) stm.close();
if(rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}

}
}

㈦ 如何获取ResultSet总行数

蚂滚取得ResultSet行数的方法主要有以下滑毕几种:
1. 用ResultSet的getRow方法来取得总行数;
2. 利用循环ResultSet元素的方法取得总闷让余行数 ResultSet rset = stmt.executeQuery(select * from table); int rowCount = 0; while(rset.next()) { ?? rowCount++;} ;
3. 利用SQL语句来取得ResultSet的总行数 ResultSet rset = stmt.executeQuery(select count(*) totalCount from yourTableName); int rowCount = 0; if(rset.next()) { ?? rowCount=rset .getInt(totalCount );}rowCount就是ResultSet的总行数。
ResultSet,数据库结果集的数据表,通常通过执行查询数据库的语句生成。

㈧ 数据库查询 报错 用尽的ResultSet

抛什埋启纤弯仿么异常了 如何调用的?
是不是这旁态句有问题 strSql = comfun.getStr8859(strSql);

㈨ 在编写访问数据库的JAVA程序时,ResultSet对象的作用是

ResultSet:完成了查询结果的存储功能,而且只能读迹迅拆去一次,不能够来回的滚昌慎动读取。

返回的是一个结果集,可以通过方法next()逐一获取从数据库取到姿枣的值

㈩ java 数据库resultset的问题

rs1肯定要关闭啊,你要理解rs1是个对瞎汪老象,通过=号的赋值是对陵缓象引用的赋值, 就是说 rs1和rs指向的是磨升同一块内存区域。应该先关闭rs。 关闭rs1的时候要判断 if(rs1 != null){rs1.close()}
------------------另外为什么要返回ResultSet对象,在方法里面把rs处理一下,返回map或者list,或者你自己定义的对象岂不是更好?