Помощь, необходимая для вставки значений в таблицу MySQL - PullRequest
1 голос
/ 09 апреля 2011

Я создал таблицу, используя mysql:

CREATE TABLE JobCard (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    JobNo Long,
    RegNo VARCHAR(20),
    Service_Type VARCHAR(20),
    Customer_Complaints VARCHAR(100)
);

в cmd.

Из Eclipse я кодировал для вставки значений, используя подготовленный оператор для таблицы. Поскольку ID - это auto_increment, я не включил его в оператор вставки.

String Query =
    "INSERT INTO JobCard (JobNo, RegNo, Service_Type, Customer_Complaints)
        VALUES (?,?,?,?)";

Но вывод показывает мне:

java.sql.SQLException: Parameter index out of range
               (5 > number of parameters, which is 4).
    at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at
com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3717)
    at
com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3701)
    at
com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4552)
    at
example.Connect.DoInsertIntoDB(Connect.java:40)

Может кто-нибудь сказать, пожалуйста, как передать список параметров? Пожалуйста, помогите мне решить эту ошибку!

Обновление:

Вот мой код: Вызов метода:

System.out.println(strLine);

String[] dbColumnValues = strLine.split("%");
Connect.DoInsertIntoDB(Long.parseLong(dbColumnValues[0]),dbColumnValues[1],dbColumnValues[2], dbColumnValues[3]);

Определение метода:

public static void DoInsertIntoDB(Long JobNo, String RegNo, String Service_Type, String Customer_Complaints){


    String Query = "INSERT INTO JobCard (JobNo, RegNo, Service_Type, Customer_Complaints) VALUES (?,?,?,?)";
    try {
        Connection conn = toConnect();

        PreparedStatement pstmt = conn.prepareStatement(Query);

        pstmt.setLong(2, JobNo);
        pstmt.setString(3, RegNo);
        pstmt.setString(4, Service_Type);
        pstmt.setString(5, Customer_Complaints);

        pstmt.executeUpdate();
        pstmt.close();
        conn.close();

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

Ответы [ 4 ]

3 голосов
/ 09 апреля 2011

Необходимо прочитать трассировку стека.В своем коде (в строке 40 Connect.java) вы пытаетесь установить значение в 5-й?но в вашем подготовленном заявлении есть только 4?

0 голосов
/ 11 января 2013

Ваша попытка должна выглядеть следующим образом,

try {
    Connection conn = toConnect();

    PreparedStatement pstmt = conn.prepareStatement(Query);

    pstmt.setLong(1, JobNo);
    pstmt.setString(2, RegNo);
    pstmt.setString(3, Service_Type);
    pstmt.setString(3, Customer_Complaints);

    pstmt.executeUpdate();
    pstmt.close();
    conn.close();

}

и это должно решить проблему ....

0 голосов
/ 09 апреля 2011

Параметр Подготовка отчета начинается с 1 числа, в зависимости от вашего кода параметр должен быть от 1 до 4 но вы закончили с 5. это вызывает индекс параметра вне диапазона

0 голосов
/ 09 апреля 2011

Когда вы устанавливаете параметры, вы начинаете с 2, и оно должно быть 1. Если вы видите, последний параметр - это индекс 5, а у вас нет параметра 5 °. Из-за этого Java говорят, чтоисключение «Индекс параметра вне диапазона».

Вы должны начать с 1.

PS: Извините за мой английский.

...