JDBI вставка вопрос

Я использую JDBI для вставки некоторых данных в таблицу MySQL с автоматическим приращением первичного ключа. Я использовал индексы, чтобы сделать вставку. Код выглядит так:

public void insertWorkout(String[] values) {
    String insertString = "insert into workouts(<column_names>) values(:0,:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27,:28,:29,:30,:31)";
    Update pUpdate = handle.createStatement(insertString);

    for(int i=0; i<vals.length;i++) {
        pUpdate.bind(i, vals[i]);
    }

    pUpdate.execute();
}

Это работало нормально некоторое время, потому что values[] всегда был правильный счет (32) и аргументы всегда были в том же порядке. Теперь, хотя ему придется иметь дело с передачей меньшего массива (18,19 или 20), и все равно делать вставку правильно; последние 14 или около того аргументов могут быть пустыми или пустыми. Порядок значений остается статическим (т. Е. Если передано 18 столбцов, то это первые 18 столбцов в таблице), а последние 20 столбцов - все int(11) колонны.

Прямо сейчас, когда передается массив меньше 32, он выдает ошибку, подобную этой:

org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: Unable to execute, no named parameter matches "20" and no positional param for place 20 (which is 21 in the JDBC 'start at 1' scheme) has been set. 

Каков наилучший способ решить эту проблему?

1 ответ

Решение

Пока порядок столбцов статичен и все отсутствующие столбцы int типы в БД, вы должны иметь возможность просто связать ноль для каждого оставшегося пропущенного аргумента. Примерно так должно работать:

String insertString = "insert into workouts....."
Update pUpdate = handle.createStatement(insertString);

for(int i=0; i<vals.length;i++) {
        pUpdate.bind(i, vals[i]);
}

if (values.length < 32) {
    for(int i =(32 - values.length); i<32;i++) {
        pUpdate.bindNull(i, java.sql.Types.INTEGER);
    }
}

pUpdate.execute();

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

Другие вопросы по тегам