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

您的第二个示例无法编译,因为字符串sql是在使用后定义的,我假设这是一个复制和粘贴错误。

Sql 参数不是这样工作的。第二个示例生成的 sql 可能类似于

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

其中,如果 中有两行table,将获得您所看到的输出。你需要做的就是把你自己的 sql 字符串放在一起:

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

一句警告:当你做这样的事情时,你需要非常小心。也许有一个您检查的允许列名的白名单,并过滤掉不在白名单上的任何字符串。

于 2013-10-05T15:21:06.577 回答