3

サーバーからデータを取得するために、注釈を介して myBatis を使用しています。n日前のデータを取得しようとすると、注釈:

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < '#{n} days'")
ArrayList<OrderRecord> getOrderHistory(@Param("n") int n);

エラーを返します:

列インデックスが範囲外です: 1、列数: 0。データベースのクエリ中にエラーが発生しました。原因: org.postgresql.util.PSQLException: 列インデックスが範囲外です: 1、列数: 0。

また、

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") String n);

nが「5日」のような場合、同様のエラーが発生します。

どのようなデータ型が期待されていますか?

私はPostgreSQLを使用しています。

4

2 に答える 2

4

Mybatis は間隔パラメーターを期待しており、整数または文字列を自動的にキャストすることはできません。

タイプPGIntervalのオブジェクトを渡す必要があります。

PGInterval pginterval = new PGInterval("5 days");

注釈は次のようにする必要があります。

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") PGInterval n);
于 2012-11-05T13:11:12.667 に答える
2

このリンクに従って、値を SQL の間隔にキャストすることもできます。たとえば、これは私のアプリケーションで使用しているものです: now() + CAST(#{my_interval} AS INTERVAL).

ここで、「my_interval」は「5 日」の文字列です。

于 2014-10-10T05:27:19.370 に答える