Предотвращение ошибок магического числа CheckStyle в запросах JDBC - PullRequest
9 голосов
/ 01 апреля 2010

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

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

        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 хорошо?Позволит ли мне вместо этого ссылаться на имена столбцов?Это идеал?и т.д ...

Спасибо!

Ответы [ 2 ]

13 голосов
/ 02 апреля 2010

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

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);

или

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

setValues(preparedStatement, values);

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

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

2 голосов
/ 01 ноября 2012

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

...