数据库查询问题

xuyanxiang 2007-04-19 02:48:46
String sql ="{call LMIS_CLPDCASH_DISTRIBUTING_RPT(1,567,1)}";
Connection conn = Until.getConncetion();
ResultSet rs = conn.createStatement().executeQuery(sql);
while(rs.next){
.................
}


那个sql是个存储过程。

执行后报这样的错:

java.sql.SQLException: JZ0S8: SQL 查询中的转义序列不对: ' {call LMIS_CLPDCASH_DISTRIBUTING_RPT(1,567,1)'。
at com.sybase.jdbc2.jdbc.ErrorMessage.raiseError(ErrorMessage.java:534)
at com.sybase.jdbc2.jdbc.EscapeTokenizer.next(EscapeTokenizer.java:222)
at com.sybase.jdbc2.jdbc.SybStatement.processEscapes(SybStatement.java:303)
at com.sybase.jdbc2.jdbc.SybStatement.doEscapeProcessing(SybStatement.java:404)
at com.sybase.jdbc2.jdbc.SybStatement.executeQuery(SybStatement.java:416)
at com.bestinfo.commons.wordhtml.Until.getResultSet(Until.java:640)
at com.bestinfo.commons.wordhtml.add.M4.deal(M4.java:45)
at com.bestinfo.commons.wordhtml.DealFirst.deal(DealFirst.java:85)
at com.bestinfo.commons.wordhtml.MainWord.doIt(MainWord.java:69)
at com.bestinfo.commons.wordhtml.MainWord.main(MainWord.java:24)
java.lang.NullPointerException
at com.bestinfo.commons.wordhtml.add.M4.deal(M4.java:51)
at com.bestinfo.commons.wordhtml.DealFirst.deal(DealFirst.java:85)
at com.bestinfo.commons.wordhtml.MainWord.doIt(MainWord.java:69)
at com.bestinfo.commons.wordhtml.MainWord.main(MainWord.java:24)
Exception in thread "main"
...全文
363 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
geelpheels 2007-04-19
  • 打赏
  • 举报
回复
CallableStatement
Rick 2007-04-19
  • 打赏
  • 举报
回复
你还是自己看看吧,内容太多,不好整理后告诉你。给你一个地址,自己研究,里面讲的很详细。

你打开这个manual之后,点“对JDBC标准的限制与解释”目录项,然后找到“执行存储过程”。之后自己看吧,例子很详细。

manual的URL:
http://infocenter.sybase.com/help/topic/com.sybase.dc38606_0605/pdf/prjdbc_ZH.pdf?noframes=true
Rick 2007-04-19
  • 打赏
  • 举报
回复
我没用过,帮你查查。
xuyanxiang 2007-04-19
  • 打赏
  • 举报
回复
我回马上结帖
xuyanxiang 2007-04-19
  • 打赏
  • 举报
回复
我用的数据库是Sybase的,请详细指教
Rick 2007-04-19
  • 打赏
  • 举报
回复
而且,要通过CallableStatement来调用存储过程,如下(不同的数据库有不同的方法获得ResultSet,具体细节查看你的数据库JDBC驱动说明。下面代码是pSQL的例子):

CallableStatement proc = con.prepareCall("{? = call LMIS_CLPDCASH_DISTRIBUTING_RPT(?, ?, ?)}");
proc.registerOutParameter(1, Types.Other); //Types.Other是pSQL JDBC范畴中的东西
proc.setInt(2, 1);
proc.setInt(3, 567);
proc.setInt(4, 1);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);
while (results.next()) {
// 处理结果集
}
results.close();
proc.close();
Rick 2007-04-19
  • 打赏
  • 举报
回复
转译序列不对,说的就是你{...}中的内容不对。检查你的过程。
zxhcloth 2007-04-19
  • 打赏
  • 举报
回复
参数个数或者参数类型和存储过程定义的不一致
richboylf 2007-04-19
  • 打赏
  • 举报
回复
是不是你的存储过程中某个变量被当成了转义字符处理了??\n....\.....
xuyanxiang 2007-04-19
  • 打赏
  • 举报
回复
快啊,高手们
xuyanxiang 2007-04-19
  • 打赏
  • 举报
回复
转义序列不对

什么意思?转义序列?
xuyanxiang 2007-04-19
  • 打赏
  • 举报
回复
我的数据库是Sybase的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧