我不知道我问的问题是否正确,但我愿意测试查询参数绑定如何工作。我测试
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;
得到了结果。
但是当我尝试在选择或排序方式中使用它时,它不起作用
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
任何人都可以解释它是如何工作的。
谢谢
您的第二个示例无法编译,因为字符串sql
是在使用后定义的,我只是假设这是一个复制和粘贴错误。
SQL 参数不是这样工作的。第二个示例生成的sql可能是类似于
select 'date_Id','data' from table order by 'date_Id'
如果table
中有两行,将获得您看到的输出。你需要做的是把你自己的sql字符串放在一起:
string sql="select " + data + " from table order by " + dateId;
警告:当你做这样的事情时,你需要非常小心。也许有一个允许的列名白名单,您可以检查这些列名,并过滤掉不在白名单上的任何字符串。