gpt4 book ai didi

java - 我正在尝试在 JDBC 中实现 TYPE_FORWARD_ONLY。但是当我尝试在结果集中向后移动时它没有显示任何异常

转载 作者:行者123 更新时间:2023-11-30 10:49:07 25 4
gpt4 key购买 nike

我正在尝试在 JDBC 中实现 TYPE_FORWARD_ONLY。但是当我尝试在结果集中向后移动时,它没有显示任何异常。我在这里做错了什么。

import java.sql.*;
public class ResultSet_Example {
public static void main(String[] args) throws ClassNotFoundException, SQLException
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver installed");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/j2ee?useSSL=false", "root","abhinav123");
System.out.println("Connection established");
// Statement d = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
//d.executeUpdate("create table info(id int,name varchar(20),sirname varchar(20))");
DatabaseMetaData md = (DatabaseMetaData) conn.getMetaData();
if(md.supportsResultSetHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT))
System.out.println("This Database Hold Cursor over Commit");
else if(md.supportsResultSetHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT))
System.out.println("This Database Hold CLOSE_CURSOR_AT_COMMIT");
Statement d = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
String query = "select * from info";
ResultSet rs = d.executeQuery(query);
while(rs.next())
{
System.out.println(rs.getString(1));
}
rs.beforeFirst();
while(rs.next())
{
System.out.println(rs.getString("name"));
}

}

}

以下是输出:

Connection established
This Database Hold Cursor over Commit
2
2
2
abhinav
abhinav
abhinav
BUILD SUCCESSFUL (total time: 4 seconds)

注意我正在使用 Jdk 8

最佳答案

根据 http://dev.mysql.com/doc/connector-j/en/connector-j-reference-implementation-notes.html结果集由 Java 驱动程序完全缓存在内存中。您可以通过指定

来禁用此行为
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);

stmt.setFetchSize(Integer.MIN_VALUE);

如果没有 fetch size 设置,则暗示(但未明确说明)您将获得缓存行为。

将提取大小设置为 Integer.MIN_VALUE 会强制驱动程序按照 Java 代码的请求从数据库中检索每一行,而不是提取整个结果集(或大量记录) ) 在一次操作中。以这种方式关闭缓存将急剧降低代码对大型结果集的性能(使其变慢)。但是,如果您绝对要求结果集不能倒退,这是唯一的解决方案。

关于java - 我正在尝试在 JDBC 中实现 TYPE_FORWARD_ONLY。但是当我尝试在结果集中向后移动时它没有显示任何异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35547276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com