Java SQL语法中的串联变量
我有以下资料:Java SQL语法中的串联变量,java,oracle,jdbc,spring-jdbc,Java,Oracle,Jdbc,Spring Jdbc,我有以下资料: public void getProceduredName(long fileId, String proceduredName ){ final String sql = "call " + proceduredName + " (:fileId)"; SqlParameterSource namedParameters = new MapSqlParameterSource("fileId", fileId); try { nam
public void getProceduredName(long fileId, String proceduredName ){
final String sql = "call " + proceduredName + " (:fileId)";
SqlParameterSource namedParameters = new MapSqlParameterSource("fileId", fileId);
try {
namedParameterJdbcTemplate.update(sql, namedParameters);
} catch (Exception e){
...
}
}
因此,一旦它读取该行并尝试在namedParameterJdbcTemplate上使用它,它就会说:糟糕的SQL语法[call procedureName(?);嵌套异常为java.sql.SQLException:ORA-06576:不是有效的函数或过程名称
现在。。。如果我这样说:
final String sql=“call hardCodedName(12345)”代码>
然后它工作了
如何修复它,以便传入变量和参数
我在这里看了看:这并不能解决问题
工作原理:
final String sql=“callproceduredname(:fileId)”代码>
我想做的是:
final String sql=“call”+proceduredName+”(:fileId)”代码>
我感觉当在Tring的中间传递变量时,它停止将字符串作为SQL语法,因此只接受语法:<代码>,调用“和<代码>”(:FILID)< <代码> < /P>
如何使用变量串联使其工作
谢谢
编辑:
我这样调用getProceduredName:
Dao.getProceduredName(fileId,proceduredName)代码>
其中dao是接口,daoImp将实际实现getProceduredName()。我在这里传递的是id类型Long,过程类型字符串的名称我的问题的语法实际上是正确的,我在过程前面遗漏了重命名DB的名称,所以它是这样的:
final String sql=“call sqlName.+proceduredName+”(:fileId)”代码>此处显示的串联应与硬编码函数名相同。你能更详细地介绍一下如何调用abc()
?我在文章的底部添加了它,上面写着编辑并重命名abc()
到getProceduredName()
你从System.out.println(sql)中得到了什么?“我猜这不是你想的,”约翰说now@John实际上,我在这两种情况下都放了两个print语句,我在procedureName前面缺少了数据库名称。感谢大家帮助我调试它,我无法告诉你们有多少人会因为Oracle上的gotcha而绊倒。如果在将连接分发给工作进程之前您有权访问这些连接,则可以通过编程方式发出ALTER SESSION SET CURRENT SCHEMA=YOURSCHEMANAME
。