[英]JDBC: Get table names involved in a SQL query
有沒有辦法知道通過 JDBC 執行的 SQL 查詢中涉及的表的名稱?
例如:
SELECT r.roleId FROM User u, UserRole r where r.userId = u.userId and u.name = "Jonh Smith"
我不僅想要這個查詢的結果集,還想要實際的表名(“用戶”和“角色”)。 我不關心視圖名稱,但如果無法獲取視圖中使用的基礎表,這不是大問題,但這必須與嵌套查詢一起使用。
至於為什么我需要這些信息,是因為我正在制作一個平台,讓其他開發人員在其上構建應用程序。 在我的平台上,我讓其他開發人員注冊他們自己的查詢並將它們存儲在數據庫中。 我不希望開發人員不得不為實際手動注冊表名以及查詢本身而煩惱。 所以在我執行查詢時,我真的不知道該查詢在做什么。
我還沒有找到如何做你需要做的事情,但無論如何我都會發布這個,因為評論太長了。 我發現的最接近的是ResultSetMetaData 。
這是一個關於如何獲得它的教程。 但是該教程沒有展示如何獲取表名。 執行此操作的方法稱為getTableName
。
/**
* Gets the designated column's table name.
*
* @param column the first column is 1, the second is 2, ...
* @return table name or "" if not applicable
* @exception SQLException if a database access error occurs
*/
String getTableName(int column) throws SQLException;
我認為您必須遍歷所有列並將表名放入Set
。 結果應該是所有使用的表,但是...問題是,如果列未在選擇中公開,那么您將無法發現該表。 我一直無法找到解決此問題的方法。
JSQLParser庫 (LGPL V2.1) 似乎能夠完全滿足要求:
Statement statement = CCJSqlParserUtil.parse("SELECT * FROM MY_TABLE1");
Select selectStatement = (Select) statement;
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(selectStatement);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.