java c3p0 存储过程_JAVA Spring 连接池 调用 Oracle 存储过程的问题?
求助,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 存储过程的问题?相关推荐
- spring+springMvc+mybatis 调用oracle 存储过程
最近在项目中遇到在mybatis中调用oracle存储过程的问题,网上各种查询,最终解决了问题,在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键, 接下来整理代 ...
- qt 处理oracle事务,qt调用oracle存储过程,该怎么处理(2)
当前位置:我的异常网» QT开发 » qt调用oracle存储过程,该怎么处理 qt调用oracle存储过程,该怎么处理(2) www.myexceptions.net 网友分享于:2013-03- ...
- java调用oracle存储过程_java调用oracle存储过程详解
之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧. 首先来看一下项目结构: 在数据库创建存储过程的脚本,假如,使用的是本地的oracl ...
- oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...
java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...
- mysql odbc连接池_Java Mysql连接池配置和案例分析--超时异常和处理
前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...
- java调用oracle过程,JAVA调用ORACLE存储过程报错
当前位置:我的异常网» Java Web开发 » JAVA调用ORACLE存储过程报错 JAVA调用ORACLE存储过程报错 www.myexceptions.net 网友分享于:2015-07-1 ...
- java调用存储过程 oracle_java调用oracle存储过程
java调用oracle存储过程 java代码 Map param = new HashMap(); param.put("in_str", "1,2,3,4" ...
- php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询
在网上找了很久都没找到结果,今天看帮助,结合JAVA程序中的一个实例,写出了这个PHP调用Oracle存储过程的例子,也许有人会说PHP调用存储过程是很简单的,但在这里我还是想把这点小成就拿来共享一下 ...
- C#调用Oracle存储过程分页
直接调用Oracle中的存储过程完成对表的分页,对代码封闭程度高,执行高效.以下为C#分页类代码,包括Oracle数据库 端存储过程PLSQL代码. // 程序调用示例: // int tota ...
最新文章
- getResources().getIdentifier(textView01, id, cn.xxx.xxx);
- 根据经纬度批量计算多个点到多个点之间的距离
- 基于springboot实现快递代取管理系统
- mysql的api框架_API接口幂等性框架设计
- openwrt dhcp不分配_【装维技巧】DHCP工作原理详解(上)
- 深度学习——人工神经网络再掀研究热潮
- 【算法漫画】什么是红黑树?
- Mysql剖析单条查询三种方法
- Unity Editor下改变场景里prefab的参数后保存时注意点
- Markdown 标记语言指北
- 《Spring揭秘》读书笔记
- 赵荣人文地理学第2版笔记和课后答案
- mysql日期相减返回月数_MySql日期相减返回月数_MySQL
- ArrayList:获取最大元素?获取最大元素索引?
- Linux 云服务器aircrack-ng后台跑包并用邮件发送结果
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十一课:Cocos2D-X网格特效1-3
- 历年至今TVB剧集目录(持续更新...我已看过的推荐)
- android x5 webview报错,appium 混合 APP,x5 内核,webview 切换报错
- ERROR: No Jack server running
- 给GIS初学者的建议
热门文章
- C++之继承探究(十):抽象基类与纯虚函数
- C++之set()函数和get()函数探究
- html界面选择按钮没法取消,如何使用JavaScript取消选择按钮
- 500万相机芯片尺寸_MGS二代系列500万像素新品面世
- json解析对应的value为null_解决golang json解析出现值为空的问题
- java contains性能_java – 使用whereArrayContains进行搜索的效率
- keil uvisoin软件出现闪退和打开工程以前添加的c文件上面出现黄色感叹号
- 电脑大小写怎么切换_苹果笔记本电脑pro系列键盘的应用攻略
- 计算机一级第103套题,全国计算机等级考试一级试题
- 宝塔linux面板安装seafile,Centos7 安装seafile 企业共享网盘