[英]How to extract column names from SQL Query as String SQL query is passed as a String
[英]extract column names from sql query after where clause
我有一个需要从数据库中提取数据的要求。 查询是-
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是where子句后面的谓词,用户将从html表单输入该谓词。
用户输入将采用以下形式:
1. TradeDate =' 2013-04-05
IsLatest ='TRUE'
2. StreamId =' IA0015
'
3.查询中可能也有IN子句
现在,呈现此查询时,我得到了异常歧义列streamId或歧义列IsLatest,因为这些列存在于多个具有相同名称的表中。 因此,要消除这种歧义,我需要将查询修改为-ir.IsLatest或ir.StreamId
要通过Java代码执行此操作,我需要首先在where子句之后解析谓词,提取列名称,并在每个列名称之前插入表名称别名-'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
解析此谓词的最佳方法是什么,或者是否有其他方法可以实现相同的结果?
我回答这个问题是不解析用户输入-有太多可能出错。 拥有一个带有下拉菜单和用于选择相等性,不相等性,范围,in语句等的按钮的UI会好得多。这看起来似乎需要更多工作,但保护自己免受SQL注入攻击的影响更大。 即使你不担心恶意的SQL注入,则该用户仍然需要得到每一件事情完全正确,或者语句失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.