- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我知道如何使用 .getTables()
获取 TABLE
和 ALIAS
条目。
final ResultSet rs = dmd.getTables(null, "MySchema", "%", new String[]{"TABLE","ALIAS"});
我需要能够确定哪个 ALIAS
与哪个 TABLE
名称匹配?
我特别需要能够在 Oracle
、SQL Server
和 DB2
上执行此操作。
假设我有一个表 T00001
并且它有一个别名 MyTable
我如何使用 DatabaseMetaData
从一个Connection.getMetaData()
调用?
最佳答案
在查看 JDBC API 和 oracle.jdbc.OracleDatabaseMetaData 之后, 我很确定没有办法直接通过 DatabaseMetaData 检索此信息使用库存 Oracle JDBC 驱动程序时。可能有针对 DB2 或 SQL Server 的特定于驱动程序的方法,因为我没有彻底检查它们。作为作弊,您可以从 DatabaseMetaData 对象中 getConnection()
并运行特定于数据库的查询来检索您需要的信息,如下所示:
public class TableAliasMapperJdbc {
public Map<String, List<String>> mapTableAliases(String url, String user, String password, String sql) throws SQLException {
try (
Connection conn = DriverManager.getConnection(url, user, password);
// we use conn.getMetaData().getConnection() instead of conn here only to fit within the parameters of the question
PreparedStatement stmt = conn.getMetaData().getConnection().prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
) {
// this may not do what you want if you have synonyms of synonyms
Map<String, List<String>> tableAliases = new HashMap<>();
while (rs.next()) {
String table = rs.getString(1);
String alias = rs.getString(2);
List<String> aliases = tableAliases.get(table);
if (aliases == null) {
tableAliases.put(table, aliases = new ArrayList<>(2));
}
aliases.add(alias);
}
return tableAliases;
}
}
public void print(String dbName, Map<String, List<String>> tableAliases) {
System.out.format("\nThe following are the table aliases for %s:\n", dbName);
for (Map.Entry<String, List<String>> entry : tableAliases.entrySet()) {
System.out.format("The alias(es) for %s are: %s.\n", entry.getKey(), String.join(", ", entry.getValue()));
}
}
public static void main(String[] args) throws SQLException {
TableAliasMapperJdbc mapper = new TableAliasMapperJdbc();
mapper.print("Oracle",
mapper.mapTableAliases(
"jdbc:oracle:thin:@localhost:1521:xe",
"scott",
"tiger",
"SELECT table_name, synonym_name FROM user_synonyms")); // or maybe all_synonyms
mapper.print("DB2",
mapper.mapTableAliases(
"jdbc:db2://localhost:50000/SAMPLE",
"db2admin",
"db2admin",
"SELECT base_tabname, tabname FROM syscat.tables WHERE type = 'A' AND owner = 'DB2ADMIN'"));
mapper.print("SQL Server",
mapper.mapTableAliases(
"jdbc:sqlserver://localhost:1433",
"sa",
"Password123",
"SELECT PARSENAME(base_object_name,1), name FROM sys.synonyms"));
}
}
使用 JDK 1.8.0_45、Oracle XE 11.2.0.2.0 及其捆绑的 JDBC 驱动程序、DB2 Express-C 10050500 及其捆绑的 JDBC 驱动程序以及带有 Microsoft JDBC 驱动程序 4.1 的 SQL Server 2014 Express 12.0.2000.8 成功测试了代码.5605.100.
<子>基于 http://sqlblog.com/blogs/john_paul_cook/archive/2010/08/24/script-to-list-synonym-contents.aspx 的 SQL Server 查询.
关于java - 在运行时从 DatabaseMetaData 匹配表名和别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31274931/
我将 JDBC 与 mysql-connector-java-6.0.2.jar 一起使用,并且除非我做错了什么,否则我认为 DatabaseMetaData.ownDeletesAreVisible
我有一个使用 JDBC-OBDC 的 Java 小应用程序的奇怪情况。我正在使用 DatabaseMetaData 类检查数据库。当我执行该程序时,一切正常。但是,当我想调试以查看包含 Databas
我在 Oracle 数据库中有一些用户,假设 UserOne、UserTwo 和 UserTree 具有相同且非空的表,名称为“tableExample”。 就我而言,我需要通过 getColumns
DatabaseMetaData().getTables() - 速度很慢,有什么替代方法吗? 以下是我的实际代码: connection.getMetaData().getTables(null,n
我在使用 Java 和 NetBeans 从本地运行的 Ubuntu 14 MySQL 连接检索元数据时遇到问题。我从 DatabaseMetaData 对象的 getColumns 方法得到一个空的
我正在使用 MySql、JDBC、Java 来编写我的代码。我无法理解 API 中某些术语的含义。它阻止我做下面的工作-要编写检查特定数据库是否存在的代码,然后检查该数据库中是否存在特定表数据库,然后
我知道如何使用 .getTables() 获取 TABLE 和 ALIAS 条目。 final ResultSet rs = dmd.getTables(null, "MySchema", "%",
元数据上的方法 getColumns() 为同义词返回一个空的结果集(对于表和 View ,它正确地返回列列表)。 这发生在 Oracle 11g Express 上并使用最新的 Oracle JDB
我正在研究 DatabaseMetaData 类以了解它是如何工作的。 java 文档注释似乎声明了一个 thing ,而代码却有所不同。我知道它是一个接口(interface),所以真正由提供 JD
我使用数据库元数据获取 SQL Server 上存储过程的列(读取参数): Connection connection = getConnection(); //getting the connect
trace_xe_action_map 和 trace_xe_event_map - 它们是什么以及它们在哪里?我不想归还那些。如何更改参数? 目前我正在使用: databaseMetadata.ge
我正在尝试 this 中解释的此接口(interface)的方法教程: 我来了: DatabaseMetaData dm = con.getMetaData(); System.err.println
我想使用 java DatabaseMetaData 获取外键并尝试过。 但我只得到外键引用 pk 列,无法引用唯一列。 我尝试使用 getCrossReference()、getImportedKe
我使用 oracle 11g,并创建了一个这样的表: create table test1( id int, name varchar(10), inserttime date ) 然后我用jdbc的
我正忙于编写一段代码以从 Oracle 数据库中获取表的所有列名。我想出的代码如下所示: DriverManager.registerDriver (new oracle.jdbc.driver.Or
我有一个 PostgreSQL 表 create table test ( id int, name varchar(2), active boolean, long_id bigint, creat
根据DatabaseMetaData#getFunctionColumns ,COLUMN_TYPE 的结果列可能是 之一 functionColumnUnknown (0) funtionColum
因此,我在一个需要能够编辑表格的项目中使用 Vaadin Java Web 框架。 Vaadin 提供了一种从 SimpleJDBCConnectionPool ( Here's the API )
什么是 Python 等价于 DatabaseMetaData 最佳答案 这不是特定于 python 的答案;事实上我不知道 Python 数据驱动程序是否有这种东西。但也许这些信息会有所帮助。 AN
我正在编写 java 类来获取所有连接数据库对象(表)。我用过 rs = meta.getExportedKeys(conn.getCatalog(), null, "account_adjustme
我是一名优秀的程序员,十分优秀!