求助,JAVA Spring 连接池 调用 Oracle 存储过程的问题?在Spring中配置了c3P0的连接池,在调用Oracle的存储过程时,报错[code]java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to oracle.jdbc.OracleConnection

at oracle.sql.TypeDescriptor.setPhysicalConnectionOf(TypeDescriptor.java:309)

at oracle.sql.TypeDescriptor.(TypeDescriptor.java:105)

at oracle.sql.ArrayDescriptor.(ArrayDescriptor.java:247)

at com.workssys.uen.server.dao.oracle.OracleDeviceInfoDAO$2.createCallableStatement(OracleDeviceInfoDAO.java:67)

at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java17)

[/code]我的Spring的配置如下:[code]

oracle

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:@172.31.0.102:1521:orcl

orca

wks

3

15

100

3

5000

[/code]Oracle中的自定义类型以及存储过程定义如下:[code]create or replace type onems_ids as table of number(19);[/code][code]create or replace procedure P_TestJava(in_ids in onems_ids) is

begin

delete from test_java;

for i in 1..in_ids.count loop

dbms_output.put_line(in_ids(i));

insert into test_java(id) values (in_ids(i));

end loop;

commit;

end P_TestJava;[/code]Java中调用的Code如下:[code]

// 这是主程序,通过Junit调用

public void testMain() {

List list = new ArrayList();

list.add(new Long(5));

list.add(new Long(3));

list.add(new Long(28));

log.info("doDeviceRegistered s-------------------");

doTest(list);

log.info("doDeviceRegistered e-------------------");

}

public List doTest(List ids) {

JdbcDAO jdbcDao = (JdbcDAO) BeanLocator.getBean("jdbcDAO");

final List res = new ArrayList(100);

final String sql =  "{call p_testjava(?)}";

jdbcDao.execute(createCreatorForTest(sql,ids),createCallbackForTest(res));

return res;

}

private CallableStatementCreator createCreatorForTest(final String sql,final List arg_ids) {

return new CallableStatementCreator() {

public CallableStatement createCallableStatement(Connection conn)

throws SQLException{

ArrayDescriptor desc = new ArrayDescriptor("ONEMS_IDS",conn);

Object[] int_ids = arg_ids.toArray();

ARRAY ids = new ARRAY(desc,conn,int_ids);

OracleCallableStatement cs = (OracleCallableStatement)conn.prepareCall(sql);

cs.setARRAY(1,ids);

return cs;

}

};

}private CallableStatementCallback createCallbackForTest(final List res) {

return new CallableStatementCallback() {

public Object doInCallableStatement(CallableStatement cs)

throws SQLException{

cs.execute();

return null;

}

};

}[/code]其中 JdbcDAO仅是Spring中的JdbcTemplate的一个空继承的子类。

哪位大侠指点一下,应该如何解决啊?

怎么报造型错误,两个connection不能传递

我记得spring调procedure是用回调方法[code] public int processControl(final String orderid,final String nmMsg,final String status){

int rlt = 0;

SpringStoredProcedure sp = new SpringStoredProcedure(dataSource,"pkg_processcontrol.pro_nextnode");

//×¢²á²ÎÊýÀàÐÍ,ÊäÈë²ÎÊýºÍÊä³ö²ÎÊýͬʱע²á,·ñÔò²»ÄÜÕýÈ·±àÒë´æ´¢¹ý³Ì

sp.setParameter("str_orderid",java.sql.Types.VARCHAR);

sp.setParameter("str_nmmsg",java.sql.Types.VARCHAR);

sp.setParameter("str_status",java.sql.Types.VARCHAR);

sp.setOutParameter("n_errCode", java.sql.Types.INTEGER);

sp.setOutParameter("str_errMsg", java.sql.Types.VARCHAR);

sp.compile();

//´«ÈëÊäÈë²ÎÊýÖµ

Map in = new HashMap();

in.put("str_orderid",orderid);

in.put("str_nmmsg",nmMsg);

in.put("str_status",status);

sp.SetInParam(in);

//Ö´Ðд洢¹ý³Ì

Map m = sp.execute();

rlt = new Integer(m.get("n_errCode").toString()).intValue();

if (rlt<0){

String sqlErrm = m.get("str_errMsg").toString();

System.out.println("ORACLE-ERROR:"+sqlErrm);

}

return rlt;

}[/code]

终于解决了!解决方法很简单,只是以前一直没有向这个方面去想。

看了上面的文章后,也没有什么进展,只是知道在Hibernate中可以用一个新的方法去得到Connection。但是对于c3p0来说,根本不适用。

后来到网上瞎逛,听一个大哥说他在spring配置了多个数据源,分别联Oracle,db2,mysql。

因此得到了启发,其实没必要从c3p0中拿connection。我完全可以配置2个数据源,对于这些特殊的Oracle的存储过程方法,可以直接用Oracle自己的连接池,甚至是非连接池的JDBC连接。只是这些数据源都指向一个数据库而已。

java c3p0 存储过程_JAVA Spring 连接池 调用 Oracle 存储过程的问题?相关推荐

  1. spring+springMvc+mybatis 调用oracle 存储过程

    最近在项目中遇到在mybatis中调用oracle存储过程的问题,网上各种查询,最终解决了问题,在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键, 接下来整理代 ...

  2. qt 处理oracle事务,qt调用oracle存储过程,该怎么处理(2)

    当前位置:我的异常网» QT开发 » qt调用oracle存储过程,该怎么处理 qt调用oracle存储过程,该怎么处理(2) www.myexceptions.net  网友分享于:2013-03- ...

  3. java调用oracle存储过程_java调用oracle存储过程详解

    之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧. 首先来看一下项目结构: 在数据库创建存储过程的脚本,假如,使用的是本地的oracl ...

  4. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

  5. mysql odbc连接池_Java Mysql连接池配置和案例分析--超时异常和处理

    前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...

  6. java调用oracle过程,JAVA调用ORACLE存储过程报错

    当前位置:我的异常网» Java Web开发 » JAVA调用ORACLE存储过程报错 JAVA调用ORACLE存储过程报错 www.myexceptions.net  网友分享于:2015-07-1 ...

  7. java调用存储过程 oracle_java调用oracle存储过程

    java调用oracle存储过程 java代码 Map param = new HashMap(); param.put("in_str", "1,2,3,4" ...

  8. php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询

    在网上找了很久都没找到结果,今天看帮助,结合JAVA程序中的一个实例,写出了这个PHP调用Oracle存储过程的例子,也许有人会说PHP调用存储过程是很简单的,但在这里我还是想把这点小成就拿来共享一下 ...

  9. C#调用Oracle存储过程分页

    直接调用Oracle中的存储过程完成对表的分页,对代码封闭程度高,执行高效.以下为C#分页类代码,包括Oracle数据库 端存储过程PLSQL代码. //    程序调用示例: // int tota ...

最新文章

  1. getResources().getIdentifier(textView01, id, cn.xxx.xxx);
  2. 根据经纬度批量计算多个点到多个点之间的距离
  3. 基于springboot实现快递代取管理系统
  4. mysql的api框架_API接口幂等性框架设计
  5. openwrt dhcp不分配_【装维技巧】DHCP工作原理详解(上)
  6. 深度学习——人工神经网络再掀研究热潮
  7. 【算法漫画】什么是红黑树?
  8. Mysql剖析单条查询三种方法
  9. Unity Editor下改变场景里prefab的参数后保存时注意点
  10. Markdown 标记语言指北
  11. 《Spring揭秘》读书笔记
  12. 赵荣人文地理学第2版笔记和课后答案
  13. mysql日期相减返回月数_MySql日期相减返回月数_MySQL
  14. ArrayList:获取最大元素?获取最大元素索引?
  15. Linux 云服务器aircrack-ng后台跑包并用邮件发送结果
  16. 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十一课:Cocos2D-X网格特效1-3
  17. 历年至今TVB剧集目录(持续更新...我已看过的推荐)
  18. android x5 webview报错,appium 混合 APP,x5 内核,webview 切换报错
  19. ERROR: No Jack server running
  20. 给GIS初学者的建议

热门文章

  1. C++之继承探究(十):抽象基类与纯虚函数
  2. C++之set()函数和get()函数探究
  3. html界面选择按钮没法取消,如何使用JavaScript取消选择按钮
  4. 500万相机芯片尺寸_MGS二代系列500万像素新品面世
  5. json解析对应的value为null_解决golang json解析出现值为空的问题
  6. java contains性能_java – 使用whereArrayContains进行搜索的效率
  7. keil uvisoin软件出现闪退和打开工程以前添加的c文件上面出现黄色感叹号
  8. 电脑大小写怎么切换_苹果笔记本电脑pro系列键盘的应用攻略
  9. 计算机一级第103套题,全国计算机等级考试一级试题
  10. 宝塔linux面板安装seafile,Centos7 安装seafile 企业共享网盘