0

正しい質問をしているかどうかはわかりませんが、クエリ パラメーター バインディングがどのように機能するかをテストしたいと思います。テストしました

string sql = select data from table where data_id =:dataId;
Session session = sessionFactory.createSQLQuery(sql);
    query.setParameter(dateId,"23456");

結果は

select data from table where date_id=23456;

結果を得た.

しかし、selectまたはorder byで使用しようとすると、機能しません

    string sql = select :data from table order by :dateId
Session session = sessionFactory.createSQLQuery(sql);
query.setParameterList("data",data.split(","));
query.setParameter("dateId",dateId);

考えてみましょう

data="date_Id,data";
dateId="date_id";

その番組

表の行の終わりまでの列名の繰り返し

出力

row 1) date_id data
row 2) date_id data

期待される出力

row 1) 234,ert
row 2) 456,jhk

誰でもその仕組みを説明できますか。

ありがとう

4

1 に答える 1

0

使用後に文字列が定義されるため、2 番目の例はコンパイルされませんsql。これは、コピー アンド ペースト エラーであると仮定します。

SQL パラメータは、そのようには機能しません。2番目の例が生成しているSQLは、おそらく次のようなものです

select 'date_Id','data' from table order by 'date_Id'

に 2 つの行がある場合table、表示されている出力が得られます。あなたがする必要があるのは、あなた自身のSQL文字列をまとめることです:

string sql="select " + data + " from table order by " + dateId;

警告の言葉: このようなことをするときは、非常に注意する必要があります. おそらく、チェックする許容列名のホワイト リストを用意し、ホワイト リストにない文字列を除外します。

于 2013-10-05T15:21:06.577 に答える