Создание операторов SQL программно с помощью Spring - PullRequest
2 голосов
/ 20 июля 2011

Мне нужно создать оператор SQL программно. У меня есть значения в карте в форме <"имя_ столбца", значение> . Теперь у меня есть базовый запрос, я добавляю предложение where и, перебирая карту, если значение не ноль, я добавляю "" + key + "=" + value + "и" . Затем я вырезал последние 5 символов, и все готово. Я хотел бы использовать что-то лучше, чем это. Обратите внимание, что я использую шаблон Tapestry 5 + Spring JDBC (Hibernate не вариант).

Спасибо, Ондрей

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

Если вам нужно использовать динамическое условие, я все равно рекомендую сгенерировать where с ?, как

" " + key + "=?"

, а затем повторить итерацию для вызова preparedStatement.setXXX.В зависимости от драйвера вы можете вызвать setObject или проверить тип параметра:

if (value instanceof String) 
    preparedStatement.setString((String)value)
else if ...

Использование ? имеет свои преимущества:

  • Вы не думаете о преобразовании типов, таких какDate к строке и цитированию специальных символов.
  • База данных может более эффективно кэшировать планы выполнения при использовании ?, а не буквальных значений.
0 голосов
/ 20 июля 2011

Вам необходимо использовать класс PreparedStatementCreator

final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";

KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
    new PreparedStatementCreator() {
        public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
            PreparedStatement ps =
                connection.prepareStatement(INSERT_SQL, new String[] {"id"});
            ps.setString(1, name);
            return ps;
        }
    },
    keyHolder);

// keyHolder.getKey() now contains the generated key

Ссылка: http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html

См. Раздел: 11.2.8

0 голосов
/ 20 июля 2011

Похоже, вы ищете что-то вроде squiggle-sql .И не забывайте о готовых утверждениях с их «заданными» методами.

...