我有一个Play 2.4.3应用程序并使用JDBC连接到SQL Server DB。我刚写了一个数据库类来处理调用存储过程。但是,我碰到了一堵墙:
我的过程的开始:
ALTER PROCEDURE [WebApp].[Content_GetByAppID]
(
@inAppID int,
@inContentGroupID int = null,
@inContentTypeID int = null,
@inContentStatus char(1) = 'A'
)
AS
这是我编写的用于准备语句的类方法:
private CallableStatement createStatement(Connection inConnection, String inProc, DataMap inParams) throws SQLException{
CallableStatement statement = inConnection.prepareCall("{call" + inProc + "}");
if( inParams != null ) {
for(Map.Entry<String,Object> e : inParams.entrySet()){
String name = e.getKey();
Object value = e.getValue();
if( value != null ){
if (value instanceof Timestamp){
// Sql does its own time conversion. Let's avoid that
statement.setTimestamp(name, (Timestamp)value, Calendar.getInstance(TimeZone.getTimeZone("GMT")) );
} else {
statement.setObject(name, value);
}
} else {
// Pass in Special SQL NUll type if parameter is null
statement.setNull(name, Types.NULL);
}
}
}
return statement;
}
我用这个打电话: DataMap params = new DataMap();
params.put("inAppID", Play.application().configuration().getInt("richfoods.app.id"));
params.put("inContentTypeID", typeID);
params.put("inContentGroupID", groupID);
params.put("inContentStatus", status);
List<Content> content = mgContentDB.getList(
"WebApp.Content_GetByAppID(?,?,?,?)",
params);
每当createStatement
中的语句变量尝试设置参数时,我都会收到此错误:
com.microsoft.sqlserver.jdbc.SQLServerException:com.microsoft.sqlserver.jdbc.SQLServerException:未为存储过程定义参数inContentTypeID。
任何想法导致了什么?
编辑:我认为有趣的是,错误并不包括proc名称。应该不应该吗?这告诉我它无法找到过程?答案 0 :(得分:2)
你缺少空格字符:
// Your code
inConnection.prepareCall("{call" + inProc + "}");
// Fix
inConnection.prepareCall("{call " + inProc + " }");