JDBC SQLServerException参数未定义

时间:2017-02-17 07:12:53

标签: java sql-server jdbc playframework

我有一个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名称。应该不应该吗?这告诉我它无法找到过程?

1 个答案:

答案 0 :(得分:2)

你缺少空格字符:

// Your code
inConnection.prepareCall("{call" + inProc + "}");

// Fix
inConnection.prepareCall("{call " + inProc + " }");