在where子句之后从sql查询中提取列名

时间:2013-08-16 09:43:25

标签: java sql where

我需要从数据库中提取数据。 查询是 -

SELECT e.Data AS EntityBlob, f.Data AS FpmlBlob 
FROM [Trades.InventoryRecord] ir, EntityBlob e, FpmlBlob f 
WHERE %s AND uid = e.uid AND uid = f.uid

这里%s是用户从html表单输入的where子句之后的谓词。

用户输入将采用以下形式:
1. TradeDate ='2013-04-05'和IsLatest ='TRUE'
2. StreamId ='IA0015'
3.查询也可以有IN子句

现在,当呈现此查询时,我得到异常ambigous列streamId或ambigous列IsLatest,因为这些列存在于具有相同名称的多个表中。因此,为了消除这种歧义,我需要将查询修改为 - ir.IsLatest或ir.StreamId

要通过java代码执行此操作,我需要首先在where子句之后解析谓词,提取列名并在每个列名之前插入表名alias-'ir',以便查询变为 -

SELECT e.Data AS EntityBlob, f.Data AS FpmlBlob 
FROM [Trades.InventoryRecord] ir, EntityBlob e, FpmlBlob f 
WHERE ir.TradeDate = '2013-04-05' AND ir.IsLatest = 'TRUE' AND uid = e.uid AND uid = f.uid

解析这个谓词的最佳方法是什么,或者如果有其他方法可以达到相同的结果?

1 个答案:

答案 0 :(得分:0)

我对这个问题的回答是不解析用户输入 - 太多可能出错。拥有一个带有下拉菜单的UI和用于选择相等,不等式,范围,语句等的按钮会好得多。看起来更像是工作,但保护自己免受SQL注入攻击更是如此。即使您不关心恶意SQL注入,用户仍然必须使所有完全正确,或者语句失败。