首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

急Java调用Oracle实施SQL:ORA-00911: 无效字符

2012-09-22 
急:Java调用Oracle执行SQL:ORA-00911: 无效字符开发语言:Java数据库:Oracle 10g问题:在Java代码中,有三个S

急:Java调用Oracle执行SQL:ORA-00911: 无效字符
开发语言:Java
数据库:Oracle 10g
问题:在Java代码中,有三个SQL需要执行,1个是INSERT,1个是UPDATE,另一个是DELETE,我使用分号(;)将三个SQL连接起来,然后将其执行

Java code
con.prepareStatement(allSQL.toString()).execute();

但会报如下错误:
Java code
java.sql.SQLException: ORA-00911: 无效字符    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:656)    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:168)    at com.ebest.pg.dao.VisitDao.addVisitMsg(VisitDao.java:452)    at com.ebest.pg.service.VisitMsgService.addVisitMsg_tran(VisitMsgService.java:222)    at com.ebest.pg.service.VisitMsgService.doService(VisitMsgService.java:25)    at com.ebest.pg.servlet.ServletApp.doService(ServletApp.java:161)    at com.ebest.pg.servlet.ServletApp.doPost(ServletApp.java:72)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)    at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)    at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)    at java.lang.Thread.run(Thread.java:595)



我保证每个SQL语句都能单独在SQL Plus中正常执行的。



[解决办法]
con.prepareStatement(allSQL.toString()).execute();
这样当然不行,3条语句只能用批处理:
 pre=con.createStatement();
pre.addBatch(sql1);
pre.addBatch(sql2);
pre.addBatch(sql3);
 或者
con.prepareStatement(sql1).execute();
con.prepareStatement(sql2).execute();
con.prepareStatement(sql3).execute();

热点排行