Tag: oracle

如何处理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 […]

Oracle RAW id列和JDBC

我正在尝试开发一个调用Oracle 11g XE数据库的简单Java servlet。 我提供的数据库使用RAW列类型作为所有表的ID。 最初我试图从JDBC获取数据,并且base64编码返回的VARBINARY字节数组,这样我就可以通过JSON将结果传递给前端系统。 但是,在base64解码并尝试将字节数组设置回列之后,Oracle / JDBC没有返回数据。 我决定尝试让Oracle进行编码/解码,并且能够使用SQL Developer 2在Oracle中获取以下查询。 SELECT utl_encode.base64_encode(IDCOLUMN), FIRST_NAME FROM TABLENAME SELECT utl_encode.base64_encode(IDCOLUMN), FIRST_NAME FROM TABLENAME WHERE IDCOLUMN = utl_encode.base64_decode(‘BASE64STRING’) 但是在使用JDBC执行这些queires时: conn = isConnSupplied ? userConn : ResourceManager.getConnection(); Statement stmt = conn.createStatement(); try { ResultSet rset = stmt.executeQuery(“SELECT utl_encode.base64_encode(IDCOLUMN), FIRST_NAME FROM TABLENAME”); try { while (rset.next()) System.out.println (rset.getString(1)); // […]

Java等效的Oracle翻译

在java中是否有任何与oracle翻译函数相同的字符串函数或库? 在oracle我可以这样做: select translate( ‘23423k!(dfgd){sdf};’, ‘(){}k!’, ‘{}()’ ) from dual; 得到这个: 23423{dfgd}(sdf); 但在java中,如果我这样做: String a=”23423k!(dfgd){sdf};”; String b=a .replace(“(“, “{“) .replace(“)”, “}”) .replace(“{“, “(“) .replace(“}”, “)”) .replace(“!”, “”) .replace(“k”, “”) ; System.out.println(“ori:”+a); System.out.println(“mod:”+b); 我明白了: ori:23423k!(dfgd){sdf}; mod:23423(dfgd)(sdf);

如何同步PL / SQL调用的java方法

我只是遇到了一个与并发相关的问题,其逻辑流程是当客户端(称为Oracle Forms)提交请求(称为并发程序)并调用plsql过程时,此过程最终将调用java静态方法。 我发现当我在同一时间或非常短的间隔(如1秒)内提交两个请求时,会注意到一些并发问题。 java方法是做一些事情的起点,从数据库中搜索建议应该将哪些记录插入到数据库中。 问题是,它们会导致重复的结果,因为当我查询时,两个请求都可以很好地插入新记录。 我试过在静态java方法中添加synchronized ,但这并没有解决这个问题,为什么呢? 我所做的是: public static synchronized void execute 请注意,插入将在plsql中调用,这意味着如果仅同步java方法,则执行不充分的同步。 但是当我查看日志时,它会显示两个请求在同一秒内运行,我不认为这是正常的! 因为查询数据库和做建议是耗时的。 为了使java方法非常耗时,我添加了一个代码调用Thread.sleep(5000) ,并记录此代码后的时间并记录线程ID。 惊喜地发现Thread id是1! 而且,他们通过睡眠的时间也在同一时间。 这是为什么? 我该怎么做才能解决问题? 对java方法或pl sql的任何锁定? PS:我现在正在尝试使用DMBS_LOCK ,这似乎有效,但我仍然希望知道java方法不同步的原因。

在容器外定义jta数据源

我们的应用程序目前使用的是JBoss standalone.xml中定义的数据源,基本上我们需要在应用程序中定义它,而不是在容器中定义一段时间。 我们目前的设置是; 应用程序的context.xml; … persistance.xml: org.hibernate.ejb.HibernatePersistence java:/jdbc/RTSdb … true datasource.xml: 基本上我想要的只是线 java:/jdbc/RTSdb 从datasource.xml读取而不是去容器(JBoss)。 看起来它很简单,但在阅读了一些Spring和Oracle文档后,我找不到答案。

如何将dbcp连接转换为oracle连接?

我需要在运行时将PoolableConnection转换为OracleConnection,但我不知道该怎么做。 因为我得到了classCastException,如果所有类都扩展了Connection,我能做到吗?

如果密码具有特殊字符,则无法使用JDBC连接到oracle数据库

我正在尝试使用JDBC连接到oracle数据库。 以下是代码:: public class OraclePwdTest { static{ try { Class.forName(“oracle.jdbc.OracleDriver”); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated method stub String ip =”192.168.20.145″; String sid = “oradg”; int port = 1521; String user = “sys”; String pwd = “s@novi123”; Connection conn = null; String url = […]

无法将阿拉伯字符插入oracle数据库

我在使用JDBC驱动程序从java中读取oracle中的阿拉伯字符时出现问题,主要问题是我找不到正确的字符编码来获取正确的数据,但我使用此方法手动解决了问题: public static String cleanORCLString(String s) throws UnsupportedEncodingException { byte[] bytes = s.getBytes(“UTF16”); String x = new String(bytes, “Cp1256”); String finalS = x.substring(3); StringBuilder sb = new StringBuilder(finalS); for(int k = sb.length() – 1 ; k > 0 ; k–) { if(!isEven(k)) { sb.deleteCharAt(k); } } return sb.toString(); } 这个方法给我正确的字符,就像它在数据库中显示的那样,但是当我尝试更新/插入阿拉伯数据时,它会保存错误的字符。 例如:我的文本在数据库中保存为“?????????” 而不是“مرحبا”。 这是我连接到oracle数据库的方式。 URL = […]

如何使用MyBatis调用Oracle数据库序列号?

我想通过使用MyBatis从我的Oracle数据库10g中调用序列号,但我只收到如下错误消息: ORA-02289: Sequence is not available. 如何从Oracle数据库中调用序列号? 以下是关于当前MyBatis版本的Maven Project Dependency: org.mybatis mybatis-spring 1.1.1 这是我的Dao Java类: long mySeqNumber = myDaoClass.getNewNumber(); // here I get an exception 这是我的xml声明: SELECT mySeq.nextval FROM dual

无法找到或加载oracle.jdbc.driver.OracleDriver

我已经安装了Oracle 11.2和Java: java version “1.7.0_09” Java(TM) SE Runtime Environment (build 1.7.0_09-b05) Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode) 在命令行中,如果我尝试: java oracle.jdbc.driver.OracleDriver Java说:impossibile加载或找到oracle.jdbc.driver.OracleDriver 我复制了ojdbc5.jar , ojdbc6.jar和ojdbc6_g.jar 从oraclexe\app\oracle\product\11.2.0\server\jdbc\lib到 C:\Program Files\Java\jdk1.7.0_09\lib 如果我运行echo %CLASSPATH%我得到: C:\Program Files\Java\jdk1.7.0_09\lib (ie where I have copied the jar files) Java无法找到oracle.jdbc.driver.OracleDriver任何原因?