Tag: ojdbc

将ARRAY传递给存储过程时出现死锁

在将ARRAY发送到stord proc时,我们正在获得java级死锁。 我正在附加线程转储。 Found one Java-level deadlock: ============================= “http-bio-8080-exec-11”: waiting to lock monitor 0x00000000406fb2d8 (object 0x00000000fea1b130, a oracle.jdbc.driver.T4CConnection), which is held by “http-bio-8080-exec-4” “http-bio-8080-exec-4”: waiting to lock monitor 0x00000000407d6038 (object 0x00000000fe78b680, a oracle.jdbc.driver.T4CConnection), which is held by “http-bio-8080-exec-11” Java stack information for the threads listed above: =================================================== “http-bio-8080-exec-11”: at oracle.sql.TypeDescriptor.getName(TypeDescriptor.java:682) – waiting to lock (a […]

当关闭连接池需要太多时间时,如何强制关闭连接池中的连接?

有时关闭连接需要花费大量时间,例如超过10分钟到1小时,或者更糟,即使是无限期,取决于查询的重量或速度。 在客户端因为花费太多时间而取消查询的情况下,我希望尽快释放使用的底层连接。 我尝试取消PreparedStatement,关闭它,然后关闭结果集,然后最后关闭连接。 几乎立即取消。 关闭PreparedStatement和ResultSet需要花费太多时间,我必须将它包装在Callable with timeout中,以便在适当的时候跳过该进程并继续关闭连接本身。 我还没有什么运气可以试试。 我该如何处理? 我不能简单地让连接不公开,我不能让用户等待10分钟才能进行另一个类似的查询。 是什么原因导致连接关闭需要花费太多时间? 还有什么我能做的吗? 您认为Oracle查询提示会有帮助吗? 顺便说一下,我正在通过瘦型驱动程序使用Oracle JDBC。 更新: 显然,可以通过在connectionCacheProperties中配置TimeToLive属性来强制关闭连接,该属性会在特定时间内关闭连接。 但是,我需要的是根据需要。 这值得一提,因为这certificate可以像连接池那样强制关闭它。 事实上,我甚至在我的日志上收到以下消息。 ORA-01013: user requested cancel..

Oracle ojdbc8 12.2.0.1被Maven禁止

Oracle ojdbc8 12.2.0.1自2017年12月起被Maven 禁止 ,之前运行良好。 Oracle存储库(setting.xml)上的配置发生了哪些变化? Maven项目: https : //github.com/sgrillon14/MavenSampleOracleJdbc 完整跟踪: https : //travis-ci.org/sgrillon14/MavenSampleOracleJdbc

Oracle JDBC charset和4000 char限制

我们正在尝试将UTF-16编码的字符串存储到AL32UTF8 Oracle数据库中。 我们的程序完全适用于使用WE8MSWIN1252作为字符集的数据库。 当我们尝试在使用AL32UTF8的数据库上运行它时,它会转到java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column 。 在下面的测试用例中,只要我们的输入数据不会太长,一切正常。 输入字符串可以超过4000个字符。 我们希望保留尽可能多的信息,即使我们意识到必须切断输入。 我们的数据库表使用CHAR关键字定义(见下文)。 我们希望这可以让我们存储多达4000个字符集。 可以这样做吗? 如果是这样,怎么样? 我们尝试使用ByteBuffer将String转换为UTF8但没有成功。 OraclePreparedStatement.setFormOfUse(…)也没有帮助我们。 切换到CLOB不是一种选择。 如果字符串太长则需要剪切。 这是我们目前的代码: public static void main(String[] args) throws Exception { String ip =”193.53.40.229″; int port = 1521; String sid = “ora11”; String username = “obasi”; String password […]

如何处理callableStatement.registerOutParameter(1,java.sql.Types.BOOLEAN);

在Oracle 10g / 11g中有一个存储过程,如下所示: CREATE OR REPLACE PROCEDURE SP_SOME_PROC ( PRM_ID IN NUMBER , START_DATE IN DATE, RESULT OUT BOOLEAN) is… 使用以下代码调用它并获得结果: String sql = “{call SP_SOME_PROC(?,?,?) }”; callableStatement = conn.prepareCall(sql); callableStatement.setLong(1, theid); callableStatement.setDate(2, new java.sql.Date(startDate.getTime())); callableStatement.registerOutParameter(3, java.sql.Types.BOOLEAN); callableStatement.executeUpdate(); Boolean result = callableStatement.getBoolean(3); 但是,上面的代码会产生如下例外情况 [10/8/13 2:28:24:736 EEST] 0000009a SystemErr R java.sql.SQLException: Invalid column type: 16 […]

如何在build.gradle文件中添加OJDBC6.jar?

我在我的应用程序中连接到Oracle Db并尝试使用gradle构建来构建应用程序。 我无法从gradle build访问OJDBC6.jar。 可以请一些人,让我知道,我们如何将ojdbc6.jar添加到build.gradle文件中。

ojdbc6.jar和ojdbc7.jar有什么区别?

ojdbc6.jar是否适用于JDK 1.7和Oracle 12c? 我应该使用ojdbc7.jar吗? 先谢谢你。

将LIKE与ojdbc7.jar一起使用时出现SQLSyntaxErrorException

我有以下声明: PreparedStatement prpStat = conn .prepareStatement(“SELECT * FROM natperson WHERE name LIKE ?”); prpStat.setString(1, “A”); ParameterMetaData pmd = prpStat.getParameterMetaData(); ResultSet rs = prpStat.executeQuery(); 当我执行prpStat.getParameterMetaData();时,我得到以下内容prpStat.getParameterMetaData(); ojdbc7.jar的方法。 使用ojdbc6时不会抛出exception。 java.sql.SQLSyntaxErrorException: ORA-00904: “NAMEIKE”: ungültiger Bezeichner at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385) at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:938) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249) at oracle.jdbc.driver.T4C8Odscrarr.doODNY(T4C8Odscrarr.java:96) at oracle.jdbc.driver.T4CPreparedStatement.doDescribe(T4CPreparedStatement.java:719) at oracle.jdbc.driver.OracleStatement.describe(OracleStatement.java:4223) at oracle.jdbc.driver.OracleResultSetMetaData.(OracleResultSetMetaData.java:52) at oracle.jdbc.driver.OracleStatement.getResultSetMetaData(OracleStatement.java:4206) at oracle.jdbc.driver.OraclePreparedStatement.getMetaData(OraclePreparedStatement.java:4603) […]

Hibernate使用hibernate.jdbc.batch_versioned_data保存过时数据

环境 Hibernate 4.2 ojdbc6 – Oracle 11.2.0.3.0 JDBC 4.0 Oracle数据库11g 问题 我们遵循了许多建议来配置我们的Hibernate批处理方式如下: 100 true true true 我们检查了日志,并且看到生成的SQL语句已经批处理。 但是,如果两个事务同时修改相同的版本化实体行,Hibernate将成功提交它们,导致最后提交的事务中的冲突更新丢失(非冲突数据保存在两个事务中,因此最后一个事务离开数据库处于不一致的状态)。 令人惊讶的是,关于这种行为的文档很少。 Hibernate官方文档说: hibernate.jdbc.batch_versioned_data 如果JDBC驱动程序从executeBatch()返回正确的行计数,请将此属性设置为true。 打开此选项通常是安全的。 然后,Hibernate将使用批量DML来自动生成版本化数据。 默认为false。 通常安全 ? 在注意到整个版本控制被破坏之前,我们几乎将其发送到生产环境。 我们在五年前发布了一篇描述这种奇怪现象的博客 。 很明显,Hibernate很长一段时间没有做过任何事情。 Hibernate有这样的行为吗? 它从jdbc驱动程序获取更新行的计数未知的信息,为什么它不会抛出exception来指示它,而是留下版本检查已成功通过的印象?

在中央存储库中找不到Maven ojbc 6 jar

嗨,我已将ojdbc jar放在我的本地存储库中,但仍然出现以下错误。 无法解决项目的依赖关系找不到http://repo.maven.apache.org/maven2中的com.oracle:ojdbc6:jar:11.2.0缓存在本地存储库中,在更新间隔之前不会重新尝试解析中心已经过去或强制更新 将Settings.xml C:\Rahul\Repository true http 0000 username pass 这是我为ojdbc提供的依赖。 com.oracle ojdbc6 11.2.0 我已将Ojdbc jar放在C:\ Rahul \ Repository \ com \ oracle \ ojdbc6 \ 11.2.0中。 我仍然得到同样的错误。请让我知道如何解决这个问题。 提前致谢。