【发布时间】:2012-02-14 18:25:54
【问题描述】:
使用 Microsoft 提供的 JDBC 驱动程序 (sqljdbc4.jar) 我无法使用为其定义的同义词调用存储过程。 IE。对于定义为的同义词:
CREATE SYNONYM dbo.synonym_name for dbo.procedure_name
运行由以下人员创建的可调用语句时:
CallableStatement callStmt = conn.prepareCall("{ call [dbo].[synonym_name] (?,?,?,?,?,?) }");
我得到一个例外:
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Parameter param_name was not defined for stored procedure [dbo].[synonym_name].
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.findColumn(SQLServerCallableStatement.java:1217)
at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.setString(SQLServerCallableStatement.java:1563)
at testmssql.main(testmssql.java:53)
即使参数设置正确(如果我直接调用过程(绕过同义词)一切正常)。
此外,如果我用 JTDS 替换 Microsoft 的驱动程序,一切正常。
如何通过 Microsoft SQL Server 的 JDBC 驱动程序使用存储过程的同义词运行 CallableStatement?
【问题讨论】:
-
我看到有问题,但问题是什么?
-
@Paul Sasik - 我添加了一个问题 - 这可能很难阅读,但我无法更好地表达它。
-
+1 听起来不错。我认为这是您正在寻找的解决方案,但您的 OP 有几条路径。顺便说一句,为什么 JTDS 不是一个好的解决方案?并且您必须有存储过程的同义词吗?
-
@Paul Sasik - JTDS 或不使用同义词都是有效的选项,但我正在调查为什么我们会遇到 MS 驱动程序异常。 AFAIK 同义词用于将现有存储过程桥接到我们项目的命名空间。
标签: java sql-server jdbc