gpt4 book ai didi

java - 仅当 TYPE_SCROLL_INSENSITIVE、CONCUR_READ_ONLY 时结果集不正确

转载 作者:行者123 更新时间:2023-12-01 04:53:46 25 4
gpt4 key购买 nike

我正在编写一段简单的代码:

import java.sql.*;

class ODBC
{
MyConnection myCon;
Connection jdbcConnection;
ResultSet rs;
String sql;
PreparedStatement stmt;

public ODBC() throws Exception {
init();
}

public void init() throws Exception{
myCon = new MyConnection();
jdbcConnection = myCon.getConnection();
}

public void runQuery() throws SQLException {
sql = "SELECT DISTINCT HELPDESK_CASE.INCIDENT_NUMBER, "
+ "HPD_AUDIT.AUDIT_DATE, HPD_AUDIT.AUDIT_FIELD, "
+ "HELPDESK_CASE.DETAILED_DESCRIPTION, "
+ "HPD_AUDIT.AFTER_VALUE, "
+ "HELPDESK_CASE.DESCRIPTION "
+ "FROM HELPDESK_CASE INNER JOIN "
+ "HPD_AUDIT ON HELPDESK_CASE.INCIDENT_NUMBER "
+ "= HPD_AUDIT.INCIDENT_NUMBER "
+ "WHERE (((HELPDESK_CASE.INCIDENT_NUMBER)='INC001001837949') "
+ "AND ((HPD_AUDIT.AUDIT_FIELD)='Assigned Group')) "
+ "ORDER BY HELPDESK_CASE.INCIDENT_NUMBER, "
+ "HPD_AUDIT.AUDIT_DATE";
stmt = jdbcConnection.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
rs = stmt.executeQuery();
while(rs.next()){
System.out.println("Something is here");
}
}

public static void main (String args[]) throws Exception
{
ODBC odbc;
odbc = new ODBC();
odbc.runQuery();
}

class MyConnection {
public Connection getConnection() throws Exception
{
String URL = "jdbc:odbc:corpp05";
Connection c = DriverManager.getConnection(URL, "remro", "*****");
return c;
}
}
}

我无法弄清楚以下行为。

  1. 我使用相同的 JDBC 驱动程序在 MySQL 和 Access 中运行此查询,但它们不返回任何内容(因为要查询的事件编号不存在,因此它们应该不返回任何内容)。
  2. 我需要在该程序的其他区域(在此示例片段之外)调用 resultSet.previous() resultSet.beforeFirst() 等,因此需要能够向前滚动以及向后。
  3. 当我按如下方式使用准备好的语句时:

    stmt = jdbcConnection.prepareStatement(sql);

while 循环永远不会按照预期的行为执行,但是当我按如下方式使用准备好的语句时:

stmt = jdbcConnection.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );

(我需要它,因为我需要 TYPE_SCROLL_INSENSITIVE)执行 while 循环并打印“Something is here”。

我在这里缺少什么?我觉得这是相对明显的,我需要退后一步,用其他的眼光来看待这一点,我相信。感谢您的帮助。

CMRES

最佳答案

下载thin来自 oracle 站点的驱动程序最适合您正在使用的 oracle 版本。添加jar文件位于 eclipse 外部 jar 文件存档中。全部设置完成后:您可以按如下方式建立连接:

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());                         
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","user","****");

jdbc.getTransactionIsolation()在您的情况下返回 2,因此消除了脏读的可能性。

我希望更换驱动程序可以解决您的问题。

编辑
阅读 here关于JDBC-ODBC驱动程序假设为 Oracle网站 。在描述 JDBC-ODBC 的一些行之后驱动程序它告诉了以下缺点:

Cons: Not for large-scale applications. Performance suffers because there’s some overhead associated with the translation work to go from JDBC to ODBC. Doesn’t support all the features of Java. User is limited by the functionality of the underlying ODBC driver.

因此,它提供了足够的理由相信,当应用程序仅基于 JDBC-ODBC 时,某些关键问题可能会受到影响。用于通过 java.sql 提供的敏感 API 实现数据库事务或其他重要数据库功能的驱动程序包。

关于java - 仅当 TYPE_SCROLL_INSENSITIVE、CONCUR_READ_ONLY 时结果集不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506407/

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