关于返回记录集ResultSet的问题!

[b]Re: 关于返回记录集ResultSet的问题![/b]

java ResultSet 只是数据库的一个连接。你要把它读取出来。
放在自己的ResultSet中。
自己New一个ResultSet类,继承JavaResultSet
然后怎么操作都可以了。


JSP中的JavaBean返回resultset的问题

现在状况如下:
两个Bean a.java b.java

1.a.java
//...
ReslutSet rs=null;
public ResultSet executeQuery(String sql){
//....取得ReslutSet的方法
this.rs=stmt.executeQuery(sql);;//获了一次记录集
return this.rs;
}
public void rs_close(){
this.rs.close();
}

2.b.java
//...
a a=new a();
Reslultset rs2;
rs2=a.executeQuery("select * ...");//------------------x
a.rs_close();// 这句是我想问的问题---------------------y

如果我执行了y句以后,再到rs2里面取值时,发现里面空空如也,x句到底做了些什么呢,他没有把记录集真正的传给rs2吗,我关闭对象a里面的rs 还会影响外面的rs2,这是怎么回事啊

如果不执行y句,可以从rs2中取到值


--------------------------------------------------------------------------------
回复:JSP中的JavaBean返回resultset的问题

rs2 和 rs 都是同一个结果对象的 引用

对rs2或者rs 进行关闭 实际上是关闭同一个对象

这种情况 最好把rs里面值放到容器里面 来传递

--------------------------------------------------------------------------------
回复:JSP中的JavaBean返回resultset的问题

是引用阿

--------------------------------------------------------------------------------
回复:JSP中的JavaBean返回resultset的问题

同意楼上~~~ 你可以再建立一个javaBean来关闭result~~
等到所有数据都处理完毕了,再执行这个javaBean

--------------------------------------------------------------------------------
回复:JSP中的JavaBean返回resultset的问题

建议lz好好看一下《编程思想〉的第二张
rs 把它引用的对象传递给了rs2,两个同时引用的是同一个对象,要是关闭一个,另一个也关闭了。
### JavaResultSet 的使用方法 #### 1. **ResultSet 基本概念** `ResultSet` 是 JDBC API 提供的一个接口,用于存储通过 SQL 查询语句从数据库检索的数据。它通常由 `Statement` 或 `PreparedStatement` 对象的 `executeQuery()` 方法返回[^5]。 #### 2. **创建和遍历 ResultSet** 要创建并遍历一个 `ResultSet`,可以按照以下方式实现: ```java // 创建 Statement 和 ResultSet Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM employees"); // 遍历 ResultSet while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); Date hireDate = rs.getDate("hire_date"); System.out.println("ID: " + id + ", Name: " + name + ", Hire Date: " + hireDate); } ``` 在此代码片段中: - `stmt.executeQuery()` 执行查询并将结果存入 `ResultSet`。 - `rs.next()` 将游标移动到下一行,并判断是否有更多数据。 - 调用诸如 `getInt()`、`getString()` 等方法提取具体列的值。 #### 3. **ResultSet 的常用方法** 以下是 `ResultSet` 接口中的一些重要方法及其用途: - **获取数据**:如 `getInt(String columnLabel)`、`getString(int columnIndex)` 等,根据列名或索引来访问指定列中的数据[^2]。 - **元数据支持**:可以通过调用 `getMetaData()` 获取有关表结构的信息,例如列数、列名等。 - **更新功能**:某些类型的 `ResultSet` 支持修改其内容(需设置可更新模式)。例如,在声明时传入参数 `(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)` 可启用此特性[^4]。 #### 4. **常见问题及解决方案** ##### (1)无法读取所有记录 如果发现只有一部分数据被成功读取,则可能是由于未正确关闭前一次的结果集或其他资源泄漏引起。每次完成操作后务必释放连接及相关对象以防止此类错误发生。 ##### (2)性能优化建议 对于大数据量场景下的查询结果处理,考虑采用流式加载而非一次性全部载入内存之中;另外还可以调整 fetch size 参数来控制每批次传输行数从而提升效率[^1]。 ##### (3)异常捕获机制 当尝试访问不存在字段或者类型不匹配时会抛出 SQLException 异常因此需要做好相应防护措施确保程序健壮性良好[^3]。 ### 示例代码展示如何安全有效地管理整个流程如下所示: ```java try ( Connection connection = DriverManager.getConnection(DB_URL, USER, PASS); Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { try (ResultSet resultSet = statement.executeQuery(SQL_QUERY)) { while (resultSet.next()) { processRow(resultSet); // 自定义业务逻辑函数 } } } catch (SQLException e) { handleException(e); // 错误处理器 } ``` 以上例子展示了最佳实践包括自动资源管理以及分层设计使得维护更加容易同时也增强了系统的稳定性. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值