1

私は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();
}

値をデータベースに渡しません。作成日は今日の日付と時刻にする必要があります。このクエリの何が問題なのか、誰か教えてください。どうもありがとう

4

1 に答える 1

2

通常、パラメーター化されたクエリには一重引用符を含めません。試す:

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.
于 2011-08-19T04:40:03.580 に答える