Индекс параметра вне диапазона (2> количество параметров, которое равно 1) - PullRequest
1 голос
/ 07 сентября 2011

Я написал следующий метод Java и при вызове выдает ошибку

Parameter index out of range (2 > number of parameters, which is 1).

Может кто-нибудь объяснить, что не так с моим кодом?

Заранее большое спасибо!

вот код

private void updateTskUserEmail( Connection hrmsCon ) throws SQLException
{
    ResultSet rsUserEmailMap = null;

    PreparedStatement ps = null;
    PreparedStatement psEmail = null;


    for ( String lbUserEmail : lbUserList )
    {

        try
        {
            String query = "SELECT * FROM tsk_user WHERE email=? ";

            int count = 0;
            ps = hrmsCon.prepareStatement( query );

            if ( lbUserEmail == null )
            {
                ps.setNull( ++count, java.sql.Types.VARCHAR );
            }
            else
            {
                ps.setString( ++count, lbUserEmail );
            }

            rsUserEmailMap = ps.executeQuery();
            while ( rsUserEmailMap.next() )
            {
                String queryInsert = "INSERT INTO tsk_user_email (";
                queryInsert += "user_email,";
                queryInsert += "user_id)";
                queryInsert += " VALUES(?,?) ON DUPLICATE KEY UPDATE user_id=? ";

                int countInsert = 0;
                psEmail = hrmsCon.prepareStatement( query );

                if ( lbUserEmail == null )
                {
                    psEmail.setNull( ++countInsert, java.sql.Types.VARCHAR );
                }
                else
                {
                    psEmail.setString( ++countInsert, lbUserEmail );
                }
                psEmail.setInt( ++countInsert, rsUserEmailMap.getInt( "user_id" ) );
                psEmail.setInt( ++countInsert, rsUserEmailMap.getInt( "user_id" ) );

                psEmail.execute();

            }
        }
        finally
        {
            if ( ps != null )
            {
                ps.close();
            }
            if ( rsUserEmailMap != null )
            {
                rsUserEmailMap.close();
            }
            psEmail.close();
        }
    }

}

трассировка полного стека

java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
    at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3711)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3695)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3737)
    at com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:3681)
    at it.codegen.LbEmailMapper.updateTskUserEmail(LbEmailMapper.java:155)
    at it.codegen.LbEmailMapper.main(LbEmailMapper.java:47)

1 Ответ

2 голосов
/ 07 сентября 2011

Вы должны использовать

psEmail = hrmsCon.prepareStatement(queryInsert );

вместо

psEmail = hrmsCon.prepareStatement( query );

Вы должны быть осторожны при копировании и вставке кода ...: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...