我得到以下信息
java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyConnection
当下面的代码执行时。你能帮我解决一下吗?
ComboPooledDataSource connPool = new ComboPooledDataSource();
connPool .setJdbcUrl(PropertyReader.getSystemProperty(DB_URL));
connPool .setUser(PropertyReader.getSystemProperty(DB_USER));
connPool .setPassword(Decryption.getDecryptedPwd(DB_PASSWORD));
connPool .setMaxPoolSize(MAX_POOL_SIZE);
connPool .setMaxIdleTime(MAX_IDLE_TIME);
connPool .setMinPoolSize(MIN_POOL_SIZE);
connPool .setMaxAdministrativeTaskTime(15);
java.sql.Connection conn = connPool.getConnection();
oracle.sql.CLOB c = CLOB.createTemporary(conn, false, CLOB.DURATION_SESSION);
Writer writer = c.setCharacterStream(0L);
writer.write(String.valueOf(pNoListDelimited).toCharArray());
writer.flush();
writer.close();
异常堆栈跟踪
java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyConnection
at oracle.sql.CLOB.createTemporary(CLOB.java:676)
at oracle.sql.CLOB.createTemporary(CLOB.java:640)
……
…..
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
at java.lang.Thread.run(Thread.java:595)
您正在使用特定于 Oracle 的 API,该 API 期望您的连接是特定的 Oracle 连接类。但您正在使用的 Connection 是 c3p0 代理 Connection,而不是 Oracle Connection 类。
如果您想使用 Oracle 特定的 api,您有几种选择:
- 您可以使用c3p0的原始连接操作,请参阅http://www.mchange.com/projects/c3p0/index.html#raw_connection_ops http://www.mchange.com/projects/c3p0/index.html#raw_connection_ops您正在寻找的确切示例;
- c3p0 实际上附带了一个用于 Oracle 执行此操作的 jar 文件。不过,它很少被使用,而且已经很老旧了,所以我们对此持保留态度。
- 你可以升级到c3p0-0.9.5 预发行版本 http://sourceforge.net/projects/c3p0/files/c3p0-bin/,它支持完整的 JDBC4 api,并使用 unwrap 操作来提取原始 Oracle Connection。
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)