Предотвращение ошибок магического числа CheckStyle в запросах JDBC

Я работаю над групповым проектом для класса, и мы пробуем CheckStyle.

Я достаточно хорошо разбираюсь в Java, но до этого никогда не прикасался к JDBC и не работал с базами данных.

Мне было интересно, есть ли элегантный способ избежать ошибок с магическими числами в вызовах подготовленного статемента, подумайте:

        preparedStatement = connect.prepareStatement("INSERT INTO shows "
                + "(showid, showtitle, showinfo, genre, youtube)"
                + "values (default, ?, ?, ?, ?);");
        preparedStatement.setString(1, title);
        preparedStatement.setString(2, info);
        preparedStatement.setString(3, genre);
        preparedStatement.setString(4, youtube);
        result = preparedStatement.executeUpdate();

Методы setString помечаются как магические числа, пока что я просто добавил числа 3-10 или около того в список игнорирования для магических чисел, но мне было интересно, есть ли лучший способ вставить эти значения в оператор. Я также прошу вас дать любой другой совет, который приходит на ум, увидев этот код, я хотел бы избежать развития каких-либо неприятных привычек, например. Должен ли я использовать Statement или PreparedStatement в порядке? Позволит ли это мне вместо этого ссылаться на имена столбцов? Это идеально? так далее...

Спасибо!


person Dan    schedule 01.04.2010    source источник
comment
В качестве примечания также было бы полезно знать, как избежать магических чисел при извлечении данных, т.е. getString() и т. д.   -  person Ollie Bennett    schedule 12.12.2013


Ответы (2)


Создайте служебный метод, который делает что-то вроде этого:

public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException {
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
}

И используйте его следующим образом:

setValues(preparedStatement, title, info, genre, youtube);

or

Object[] values = {
    title, info, genre, youtube
};

setValues(preparedStatement, values);

Дополнительные «лучшие практики» в отношении базового кодирования JDBC можно найти в эта статья.

Надеюсь это поможет.

person BalusC    schedule 01.04.2010

Я бы посоветовал, даже если вы не используете Spring, попробовать использовать NamedParameterJdbcTemplate. Взгляните на http://www.dzone.com/tutorials/java/spring/spring-named-parameter-jdbc-template.html, чтобы узнать, как его использовать.

person Flyhard    schedule 01.11.2012