尝试运行 alter session 命令以通过 JDBC 设置会话变量

Posted

技术标签:

【中文标题】尝试运行 alter session 命令以通过 JDBC 设置会话变量【英文标题】:Trying to run alter session command to set session variable through JDBC 【发布时间】:2015-11-16 18:32:09 【问题描述】:

我正在尝试通过 JDBC 运行更改系统命令,这是我以最佳方式运行查询所必需的。

我不确定我是否做得对,因为我看不到 alter session 语句的效果。我们如何在 JDBC 中保持相同的会话我的意思是如果我使用相同的连接并且不关闭它是否意味着我正在使用相同的会话? 连接和数据库类只是获取连接的辅助类。

MyConnection mainDatabaseConnection = new MyConnection("jdbc:oracle:thin:@aas:111:"+tm.databaseName, "sys as sysdba", "xxx");
        Database mainDatabase = new Database(mainDatabaseConnection.getConnection());

        /* Fill in with data got for the main database */
        //String auditQuery = mainDatabase.generateAuditQuery(tm.schemaName, tm.tableName);
        String auditQuery = "select id, name, school, start, end from user where start>'11-11-11' and start<'12-12-12'";
        System.out.println(auditQuery);
        ResultSet rs = mainDatabase.runQuery("ALTER SESSION set optimizer_use_invisible_indexes = true");
//        ResultSetMetaData md = rs.getMetaData();
//        System.out.println(md.getColumnCount());
        rs.close();
    mainDatabase.close();
    mainDatabaseConnection.close();

我不确定alter session 命令是否成功运行。

问题 2:当我使用 Statement 运行 Select 查询时,我得到一个结果集。当我关闭语句时,结果集是否也会关闭?那么,一旦我关闭语句或连接,所有获取的数据都会消失吗?

【问题讨论】:

请限制自己每个问题回答一个问题。 好的。从现在开始我会这样做。 【参考方案1】:

java.sql.Connection 对象代表 Oracle 中的会话。只要您继续使用同一个对象,您就处于同一个会话中。

关于关闭 Statements,正如 Mark Rotteveel 评论的那样 - 关闭 Statement 确实会关闭由它打开的 ResultSet。但是,建议您在完成后关闭 RestulSet,即使(或者,实际上 - 特别是)您打算重用 Statement 对象。

【讨论】:

那么 Alter session 语句呢。我应该使用 statment.executeUpdate() 方法吗?如何确保该会话顺利进行?感谢@Mureinik 的及时回复 @ramu 这不是一个查询,所以是的,您绝对应该使用executeUpdate()。 Wrt“我如何确保该会话顺利进行?” - 我不明白你在问什么。你能澄清一下吗? JDBC 规范确实要求关闭语句会关闭结果集。 Statement.close() 记录了这个注意:当一个 Statement 对象关闭时,它当前的 ResultSet 对象(如果存在的话)也被关闭。 也记录在第 13.1.4 节JDBC 4.2 的版本(关闭 Statement 对象将关闭该 Statement 对象生成的任何 ResultSet 实例并使该实例无效。 1.我的意思是如何检查 executeUpdate 是否正常并设置了会话变量? 2.因此,如果我想对结果集进行一些计算,我不应该关闭语句或连接。 @ramu 1. 如果executeUpdate 调用失败,它将抛出SQLException。如果没有,它就成功了。 2. 确实。

以上是关于尝试运行 alter session 命令以通过 JDBC 设置会话变量的主要内容,如果未能解决你的问题,请参考以下文章

SQL 命令提示弹出框让用户输入用户名以将值添加到 alter user "username" 命令

Oracle SQL - 在同一个 alter_session_set_clause 中为多个参数设置值

如何在 Oracle 循环中的 select 语句中执行 alter 命令?

alter database和alter system和alter session的区别

oracle Alter Session NLS FORMAT for bulk insert statements - 行为不符合预期

找出 alter system kill session ‘sid,serial#’ kill 掉的数据库会话对应进程