我不知道我是否在问正确的问题,但我愿意测试,查询参数输入绑定是如何工作的。我测试了
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
任何人都可以解释它的工作原理。
由于
答案 0 :(得分: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;
警告:当你做这样的事情时,你需要非常小心。可能有一个您检查的允许列名称的白名单,并筛选出不在白名单上的任何字符串。