Индекс параметра Java вне допустимого диапазона (2 > число параметров, равное 1)."

Я пытаюсь вставить некоторые данные в базу данных mySQL, используя java swing! Но я получаю ошибку

java.sql.SQLException: индекс параметра вне допустимого диапазона (2 > количество параметров, равное 1).

Вот код Java, который показывает ошибку:

public void saveData(String data) {
    try {
        conn = MySQL_Connect.ConnectDb();
        String sql = "insert into parameterdata(stn_number ,time_received ,temperature_value "
                + ",ph_value ,moisture_value) values(?,?,?,?,?)";
        statement = conn.prepareStatement(sql);
        statement.setInt(1, readStationNumber());
        statement.setString(2, data.substring(49, 50));
        statement.setString(3, data.substring(49, 50));
        statement.setString(4, data.substring(49, 50));
        statement.setString(5, data.substring(49, 50));
        statement.execute();
        System.out.println("Successfully saved!");
        Thread.sleep(1000);

    } catch (SQLException | InterruptedException e) {
        System.out.println("saveData() error: " + e);
    }
}

Может ли кто-нибудь показать, что может быть причиной ошибки?


person Nyerere    schedule 18.05.2015    source источник
comment
Эта проблема, похоже, ничего не связана с Swing (даже если это приложение Swing) и всего связана с SQL! Пожалуйста, в будущем выбирайте теги более тщательно, они должны быть связаны с заявленной проблемой.   -  person Andrew Thompson    schedule 18.05.2015
comment
stackoverflow.com/questions/10896151/   -  person Brijesh Bhatt    schedule 18.05.2015


Ответы (1)


Использовать

try (PreparedStatement statement = conn.prepareStatement(sql)) {
    ...
    statement.executeUpdate();
    ...
}

То есть оператор должен быть закрыт в какой-то момент, и лучше не хранить повторно используемые глобальные переменные. Выделенный, может быть, final PreparedStatement был бы в порядке.

Возможно, параллельный исполняемый код изменил оператор у вас под ногами; переназначение на statement.

person Joop Eggen    schedule 18.05.2015