簡體   English   中英

在where子句之后從sql查詢中提取列名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM