SimpleJdbcCall ArrayIndexOutOfBoundsException

时间:2016-11-26 19:43:00

标签: java spring

当我调用SimpleJdbcCall.execute(SqlParameterSource)时,我得到了一个ArrayIndexOutOfBoundsException,而且我不能在我的生活中弄清楚我做错了什么。我发现了this响应,解决方法是调用我已经在做的SimpleJdbcCall.execute(SqlParameterSource)方法。任何帮助将不胜感激。

最后一行失败的UserBean登录方法:

public static UserBean login(UserBean bean){
    String userName = bean.getUserName();
    String password = bean.getPassword();
    String salt = "";
    String returnStatus = "";
    SqlParameterSource paramSource;
    Map<String, String> namedParams;
    Map<String, Object> outMap;
    MessageDigest digest;

    SimpleJdbcCall saltJDBCCall = new SimpleJdbcCall(dataSource)
        .withProcedureName("getSalt")
        .withoutProcedureColumnMetaDataAccess();
    SimpleJdbcCall loginJDBCCall = new SimpleJdbcCall(dataSource)
        .withProcedureName("userLogin")
        .withoutProcedureColumnMetaDataAccess();

    namedParams = new HashMap<String, String>();
    namedParams.put("inLoginName", userName);
    paramSource = new MapSqlParameterSource().addValues(namedParams);
    outMap = saltJDBCCall.execute(paramSource);

存储过程:

CREATE PROCEDURE getSalt(
IN inLoginName VARCHAR(30),
OUT returnStatus VARCHAR(10),
OUT returnMessage VARCHAR(128))
BEGIN
IF EXISTS
    (SELECT loginName
    FROM EndUser
    WHERE loginName = inLoginName)
THEN
    SELECT  'PASS' INTO returnStatus;
    SELECT salt INTO returnMessage
        FROM EndUser
        WHERE loginName = inLoginName
        LIMIT 1;
ELSE
    SELECT  'FAIL' INTO returnStatus;
    SELECT  'Invalid user name or password.' INTO returnMessage;
END IF;
END//

不太有帮助的日志:

INFO: Server startup in 7965 ms
Nov 26, 2016 2:28:52 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2d55419c: startup date [Sat Nov 26 14:28:52 EST 2016]; root of context hierarchy
Nov 26, 2016 2:28:52 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [Beans.xml]
Nov 26, 2016 2:28:52 PM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
java.lang.ArrayIndexOutOfBoundsException: 0

编辑:是的,我看到了重复的&#39;线程也是如此。当我单步执行代码时,最后一行抛出该异常。下一个没有达到。我用try-catch块包围了那个语句并提出了堆栈跟踪here,但这对我来说也没什么帮助。

编辑:好的。我 终于 有一个解决方案。以下行:

    SimpleJdbcCall saltJDBCCall = new SimpleJdbcCall(dataSource)
            .withProcedureName("getSalt")
            .withoutProcedureColumnMetaDataAccess();

应该是:

    SimpleJdbcCall saltJDBCCall = new SimpleJdbcCall(dataSource)
        .withProcedureName("getSalt")
        .withoutProcedureColumnMetaDataAccess()
        .useInParameterNames("inLoginName")
        .declareParameters(
            new SqlParameter("inLoginName", Types.VARCHAR),
            new SqlOutParameter("returnStatus", Types.VARCHAR),
            new SqlOutParameter("returnMessage", Types.VARCHAR));

显然Spring并不是很聪明,可以自己注册参数。你仍然必须自己做。

0 个答案:

没有答案
相关问题