Ошибка в собственном запросе - PullRequest
1 голос
/ 19 августа 2011

Я новичок в sql, и у меня возникла проблема со следующим собственным запросом

 public void saveOfflineBatchDetails(BigInteger user_id) {

    em.createNativeQuery("INSERT INTO rst_offline_transaction_batch (created_date , user_id)" +
            "VALUES('?1', ?2)")
            .setParameter(1, new java.util.Date())
            .setParameter(2, user_id)
            .executeUpdate();
}

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

1 Ответ

2 голосов
/ 19 августа 2011

Обычно вы не включаете одинарные кавычки для параметризованных запросов.Попробуйте:

VALUES(?1, ?2)

(без кавычек вокруг ?1).В противном случае трудно (как для читателей, так и для анализаторов) определить, хотите ли вы вставить параметр 1 или литеральное значение ?1.

Вам также следует проверить возвращаемое значение из executeUpdate(), чтобы увидеть, думает ли оноэто повлияло на любые строки.Это, вероятно, даст вам ноль, но все равно стоит проверить.

И, наконец, я думаю, что даты требуют особой обработки в соответствии с:

setParameter(1, new java.util.Date(), TemporalType.DATE);

Это потому, что объект Java Date не являетсядата вообще, кроме отметки времени - вам нужно убедиться, что вы выбрали правильный тип временного объекта, чтобы в запросе помещалось правильное значение.

Короче говоря, что-то вроде:

int affected = em.createNativeQuery(
    "INSERT INTO rst_offline_transaction_batch (" +
    "    created_date," +     // ?1
    "    user_id" +           // ?2
    ") VALUES (?1,?2)"
    )
    .setParameter(1, new java.util.Date(), TemporalType.DATE)
    .setParameter(2, user_id)
    .executeUpdate();
// Check affected.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...