我想列出数据库中的所有表名。我的应用程序必须独立于DBMS。不同的DBMS具有不同的列表表命令,例如:
PstgreSQL:
SELECT * FROM pg_catalog.pg_table
Š
MySQL的:
show tables
甲骨文:
SELECT DISTINCT OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
我认为我应该使用hibernate,因为为所有DBMS编写不同的SQL查询是不舒服的。 网络中有一些示例如何在hibernate中列出表,但我找到的所有示例列表只映射了权限。我想列出所有表名,而不管hibernate实体。
答案 0 :(得分:3)
This post解释了如何使用JDBC驱动程序来实现它,这是一个更好的方法,然后使用hibernate。我也会在这里发布代码,供参考
Connection conn = DriverManager.getConnection("", "", "");
DatabaseMetaData md = conn.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
System.out.println(rs.getString(3)); // 3rd column is table name
}
答案 1 :(得分:0)
Hibernate跨平台生成HQL / JPQL查询和表达式的方式是使用dialects。每个受支持的数据库都有一个方言。
据我所知,列表不是这些方言的一部分,因此你想要的很可能是不可能的OOTB。
但你可以为目标数据库编写自己的方言。因此,您的应用程序中将有一个跨数据库* QL,并且数据库细节将被干净地抽象为方言。