Tag: oracle

如何从Oracle JDBC PreparedStatement对象获取绑定参数的值

我想在使用Oracle JDBC时使用实际绑定参数实现所有已执行语句的日志记录。 我希望我可以创建这样的日志记录方法,只传递PreparedStatement对象作为参数。 例如,我创建了PreparedStatement并绑定了一个参数 PreparedStatement ps = conn.prepareStatement( “SELECT * FROM employees WHERE employee_id = ?”); ps.setInt(1,1); 现在我希望能够从ps获得我可以放在日志文件中的实际SQL语句“SELECT * FROM employees WHERE employe_id = 1”。 到目前为止,我发现我可以使用 ((oracle.jdbc.driver.OracleStatement) ps).getOriginalSql() 要得到 SELECT * FROM employees WHERE employe_id = ? 现在我需要一些方法来从ps获取当前绑定变量的列表,以便我可以替换? 使用绑定参数值。 我试着查看ps.getClass()。getDeclaredFields()和ps.getClass()。getSuperclass()。getDeclaredFields()但到目前为止找不到存储绑定参数值及其类型的位置。 有什么建议在哪找?

multithreading数据库读取

在我们的Java应用程序中,我需要从oracle数据库中读取大约8000万条记录。 我正在尝试为此重新设计multithreading程序。 目前,我们正在使用Java 5线程池,其中10个线程基于主键模式并行读取数据库。 每个线程将读取不同的模式,如001 *和002 *。 如何提高该程序的性能? 我正在考虑设计模式,有主线程来读取数据库并将处理委托给子线程。 在我们现有的设计中,不同的线程通过10个jdbc连接来访问表。 使用新方法,我将只有一个线程读取表格。 我们为每个线程都有不同的select语句,例如count(*) from “+table+ ” where id like ‘”+format + “%'” select count(*) from “+table+ ” where id like ‘”+format + “%'” 。 Ok听起来读取rowid模式很好,但是通过rowid或rownum阅读是否很好? 任何机构都可以请求新方法的利弊,还有其他方法可以实现它。

如何确定Oracle中给定字符串的语言(英文,中文…)?

如何确定Oracle(多语言环境)中给定sting(表列值)的语言(英语,中文…)?

OCI和THIN驱动程序连接与java和oracle XE之间的数据源连接有什么区别?

我正在使用3路(OCI,THIN和数据源)编写以下代码来连接java和Oracle 10g XE,代码运行成功,但不知道THIN和OCI与数据源连接之间的区别。 1- public static void main (String args[]) throws SQLException { OracleDataSource ods = new OracleDataSource(); ods.setURL(“jdbc:oracle:thin:hr/hr@localhost:1521/XE”); Connection con = ods.getConnection(); System.out.println(“Connected”); con.close(); } 2- public static void main(String args[]) { try { // load oracle driver Class.forName(“oracle.jdbc.driver.OracleDriver”); // connect using Thin driver Connection con = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:xe”,”hr”,”hr”); System.out.println(“Connected Successfully To Oracle”); con.close(); } […]

如何告诉oracle按照从java传入的特定排序顺序进行排序?

这就是我需要做的事情。 我在java中有一个List,我可以将其转换为逗号单独的ID字符串,如此“3,4,5,6,1,2” 我想知道是否有办法将该字符串传递给oracle并根据该字符串的排序顺序进行sql代码排序? 所以这个查询: select t.id from t_test t 会导致这个订单 ID 3 4 5 6 1 2

将数据从Oracle /关系表索引到弹性搜索的更好方法是什么?

将大数据从Oracle DB索引到弹性搜索集群有哪些选项? 要求是将300Million记录一次索引到多个索引中,并且每天还有大约100万次更改的增量更新。 我已尝试过弹性搜索河/馈线的 JDBC插件,两者似乎都在内部运行或需要本地运行的弹性搜索实例。 如果有更好的选择将弹性搜索索引器作为一个独立的工作(可能是基于java的)运行,请告诉我。 任何建议都会非常有帮助。 谢谢。

Oracle的JDBC查询超时是如何实现的?

我很好奇Oralce JDBC瘦客户端如何实现查询超时。 这可以通过调用java.sql.Statement的setQueryTimeout(int seconds)方法来设置。 这是在客户端的驱动程序中实现的吗? 是一个新的线程产生并加入? 或者JDBC驱动程序是否只是向Oracle发送参数,然后它会强制执行超时? 达到超时后,客户端和数据库上的哪些资源被释放,哪些存在? 即使客户端放弃了查询还是终止,Oracle是否继续运行查询? 客户端是否还有游标对象? 谢谢

如何确定给定JDBC连接的数据库类型?

我需要处理返回三个数据库(Oracle,sybase,MS-Server)的存储过程/函数的结果集。 程序/function通常是相同的,但在Oracle中调用有点不同。 statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); … statement.execute(); ResultSet rs = (ResultSet)statement.getObject(1); JDBC没有提供处理它的通用方法,因此我需要在代码中区分不同类型的DB。 我给了连接,但不知道确定数据库是否是oracle的最佳方法。 我可以使用驱动程序名称,但宁愿找到更清洁的方式。

对Oracle进行故障排除 – 挂起进程

我正在尝试理解我们正在处理的Java进程问题。 这个过程已经在生产中运行了大约4个月,本周早些时候它开始悬挂。 当我查看进程的线程转储时,所有相关线程(3)都有如下堆栈: “TxnParser_1” prio=6 tid=0x69bd3400 nid=0x2534 runnable [0x6aa2f000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at oracle.net.ns.Packet.receive(Unknown Source) at oracle.net.ns.DataPacket.receive(Unknown Source) at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source) at oracle.net.ns.NetInputStream.read(Unknown Source) at oracle.net.ns.NetInputStream.read(Unknown Source) at oracle.net.ns.NetInputStream.read(Unknown Source) at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1099) at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1070) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:478) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207) at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790) at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039) at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132) at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687) at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653) – […]

如果B出错,请回退A. spring boot,jdbctemplate

我有一个方法’databaseChanges’,它以迭代的方式调用2个操作:A,B。 ‘A’首先,’B’最后。 ‘A’和’B’可以是我的持久存储,Oracle Database 11g中的U pdate D eletefunction。 比方说, ‘A’更新表Users中的记录,属性zip,其中id = 1。 ‘B’在表爱好中插入记录。 场景:调用了databaseChanges方法,’A’操作并更新记录。 ‘B’操作并尝试插入记录,发生某种情况,抛出exception,exception是冒充dbChanges方法。 预期: ‘A’和’B’没有任何改变。 “A”所做的更新将会回滚。 “B”没有改变任何东西,嗯……有一个例外。 实际: ‘A’更新似乎没有回滚。 “B”没有改变任何东西,嗯……有一个例外。 一些代码 如果我有连接,我会做类似的事情: private void databaseChanges(Connection conn) { try { conn.setAutoCommit(false); A(); //update. B(); //insert conn.commit(); } catch (Exception e) { try { conn.rollback(); } catch (Exception ei) { //logs… } } finally { […]