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 回答