JiveJdon Community Forums
在线434人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 2 回复 / 1
 发表新帖子   回复该主题贴
rabbitbug

悄悄话
发表文章: 6
注册时间: 2004年11月03日 10:19
Java调用Oracle存储过程的问题 2005年05月13日 14:53 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表

存储过程有一个数组参数
Table of Varchar2(20)
在Java调用该存储过程时
把用什么数据类型传进来呢?

我写了下面的程序
String sql =
"{?=call PckgStudSltCourse.addStudPreSltCourse(?,?,?,?)}";
Connection con = null;
CallableStatement cs = null;
ResultSet rs = null;
int rets[] ;
int count = 0;
try
{
con = getConnection(dataSource);
cs = con.prepareCall(sql);
cs.registerOutParameter(1,java.sql.Types.INTEGER);
cs.setString(2,years);
cs.setString(3,termID);
cs.setString(4,studentID);
//cs.setObject(5,courseIDs,java.sql.Types.ARRAY); //用这句也抛出ClassCastException
oracle.sql.ArrayDescriptor descriptor = oracle.sql.ArrayDescriptor.createDescriptor("TYPEVARCHARARRAY",(oracle.jdbc.OracleConnection)con); //就是这句抛出了异常
oracle.sql.ARRAY array = new oracle.sql.ARRAY(descriptor,con,courseIDs);
((oracle.jdbc.OracleCallableStatement)cs).setArray(5,array);
cs.execute();
count = cs.getInt(1);
}
catch (Exception ex)
{
String errorMessage = "增加数据时出错";
System.out.println(errorMessage);
ex.printStackTrace();
return -1;
}

下面是抛出的异常


INFO [STDOUT] java.lang.ClassCastException
INFO [STDOUT] at com.saintbo.javabean.db.SltCourse.addStudPreCourseCourse(SltCourse.java:2105)
INFO [STDOUT] at com.saintbo.servlet.sltcourse.AddStudPreCourse.handle(AddStudPreCourse.java:75)
INFO [STDOUT] at com.saintbo.servlet.MyExtendedServlet.service(MyExtendedServlet.java:75)
INFO [STDOUT] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
INFO [STDOUT] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
INFO [STDOUT] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
INFO [STDOUT] at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
INFO [STDOUT] at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
INFO [STDOUT] at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
INFO [STDOUT] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
INFO [STDOUT] at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
INFO [STDOUT] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:72)
INFO [STDOUT] at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
INFO [STDOUT] at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:275)
INFO [STDOUT] at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
INFO [STDOUT] at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
INFO [STDOUT] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
INFO [STDOUT] at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
INFO [STDOUT] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
INFO [STDOUT] at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
INFO [STDOUT] at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
INFO [STDOUT] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
INFO [STDOUT] at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
INFO [STDOUT] at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
INFO [STDOUT] at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
INFO [STDOUT] at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
INFO [STDOUT] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
INFO [STDOUT] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
INFO [STDOUT] at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
INFO [STDOUT] at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
INFO [STDOUT] at java.lang.Thread.run(Thread.java:536)
cswei1021

悄悄话
发表文章: 1
注册时间: 2005年05月12日 01:54
Re: Java调用Oracle存储过程的问题 2005年05月13日 16:27 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
//cs.setObject(5,courseIDs,java.sql.Types.ARRAY);
这句话中你使用了java.sql.Types,但是对于Oracle对象而言,你应该使用Oracle特定的Types:oracle.jdbc.OracleTypes。
里边有oracle.jdbc.OracleTypes.ARRAY
rabbitbug

悄悄话
发表文章: 6
注册时间: 2004年11月03日 10:19
Re: Java调用Oracle存储过程的问题 2005年05月17日 16:55 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
其实我也用过oracle.jdbc.OracleTypes.ARRAY的
但也抛出异常
现在关键是在这句之前的
oracle.sql.ArrayDescriptor descriptor = oracle.sql.ArrayDescriptor.createDescriptor("TYPEVARCHARARRAY",(oracle.jdbc.OracleConnection)con);
这句就抛出了异常了
很是纳闷啊
不转成oracle.jdbc.OracleConnection也试过,同样的异常

> //cs.setObject(5,courseIDs,java.sql.Types.ARRAY);
> 这句话中你使用了java.sql.Types,但是对于Oracle对象而言
> 阌Ω檬褂Oracle特定的Types:oracle.jdbc.OracleTypes?>
> 里边有oracle.jdbc.OracleTypes.ARRAY

这个主题有 2 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  每2分种自动备份发贴内容Ctrl-V粘贴取出,提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam