有没有办法知道通过 JDBC 执行的 SQL 查询所涉及的表的名称?
例如:
SELECT r.roleId FROM User u, UserRole r where r.userId = u.userId and u.name = "Jonh Smith"
我不仅想要此查询的结果集,还想要实际的表名称(“用户”和“角色”)。我不关心视图名称,但如果无法获取视图中使用的基础表,那不是一个大问题,但这必须与嵌套查询一起使用。
至于我为什么需要这些信息,是因为我正在制作一个平台,让其他开发人员可以在其上构建应用程序。在我的平台中,我让其他开发人员注册他们自己的查询,并将它们存储在数据库中。我不希望开发人员必须费心实际手动注册表名以及查询本身。因此,当我执行查询时,我并不真正知道该查询在做什么。
我还没有找到如何准确地完成您需要的操作,但无论如何我都会发布此内容,因为评论太长了。我发现的最接近的是结果集元数据 http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSetMetaData.html.
这是有关如何获取它的教程。 http://www.roseindia.net/jdbc/jdbc-meta-data-get-tables.shtml但该教程没有展示如何获取表名称。执行此操作的方法称为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
。结果应该是使用的所有表,但是...问题是,如果该列未在选择中公开,那么您将无法发现该表。我一直无法找到解决这个问题的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)