了解您的数据对于从分析到转型再到存储和复制的流程至关重要。jdbc 标准提供了一种直接访问数据库元数据的方法, 无论是从 java 应用程序还是在 jdbc 驱动的工具和应用程序中以编程方式访问数据库元数据。使用 cdata jdbc 驱动程序, 您可以访问来自110多个数据源的元数据, 使用 rdbms、saas、大数据甚至 nosql 数据的关系模型。
本文将使用 java 代码中的 cdata jdbc 驱动程序连接到数据源, 并检索和查看数据源元数据, 以便更深入地了解和改进使用。虽然示例和示例代码引用了 salesforce 的 cdata jdbc 驱动程序, 但这些主体可以应用于任何 cdata jdbc 驱动程序。
连接到数据
在发现数据源元数据之前, 首先需要连接到数据源。如果您还没有安装 cdata jdbc 驱动程序, 则可以下载任何驱动程序的30天免费试用版。请确保在有实际数据的数据源中使用驱动程序。
下载并安装驱动程序后, 您就可以连接到数据了。创建一个新的 java 项目, 并将 jdbc 驱动程序添加到生成路径中。
- 在日食中:
- 右键单击 “项目”, 然后选择 “生成路径”-& gt; “添加外部存档”。
- 导航到 jdbc 驱动程序 (例如, cdata.jdbc.salesforce.jar) 的 jar 文件。
- 在 intellij 中:
- 右键单击 “项目”, 然后选择 “打开模块”。
- 导航到 “项目设置” 下的 “库”, 然后单击 “添加” 以查找并添加 jdbc jar 文件。
将驱动程序添加到生成路径后, 您可以浏览连接到数据源所需的代码。从加载驱动程序 (如 jdbc 4.0) 开始 (如 jdbc 4.0), 并使用 < cn/> 类创建与数据源的连接 (在本例中为 salesforce)。要连接, 您需要配置 jdbc url, 传递必要的连接属性和值 (需要哪些属性的具体细节, 请参见数据源的联机帮助文档):
String sfURL = "jdbc:salesforce:User=user@domain.com;Password=my_sf_password;SecurityToken=my_sf_security_token;";
//optional
Class.forName("cdata.jdbc.salesforce.SalesforceDriver");
Connection sfConn = DriverManager.getConnection(sfURL);
创建连接后, 可以开始发现数据源的元数据。
发现表和视图
java 中 < c2 /> 接口的 < cn/> 方法允许您从数据源检索表列表。根据您的数据源, 这些表和视图可以表示各种数据集, 从 saas api 的简单 rest 端点到分层数据结构 (如 nosql 数据库中常见的数据结构)。cdata 驱动程序是为了提供一个合理的数据模型而构建的, 无论数据源是什么。下面的代码从 salesforce 检索表和视图的完整列表:
示例代码
//Collect the metadata
DatabaseMetaData sfMeta = sfConn.getMetaData();
//Retrieve all tables and views
ResultSet rs = sfMeta.getTables(null, null, "%", null);
//Print the results
while (rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
}
预期产出
AcceptedEventRelation
Account
AccountCleanInfo
AccountContactRole
...
VerificationHistory
VisualforceAccessMetrics
Vote
WebLink
如果要将结果限制为表、视图、系统表或任意组合, 请将字符串数组作为类型参数传递给 < cn/> 方法:
- 表:getTables(null, null, “%”, new String[]{“TABLE”})
- 浏览次数:getTables(null, null, “%”, new String[]{“VIEW”})
- 系统表:getTables(null, null, “%”, new String[]{“SYSTEM TABLE”})
上面的示例代码仅显示表名
了解数据源中的表后, 可以使用 < cn/> 方法获取有关指定表的列的信息。
发现列
java 中 < c2 /> 接口的 < cn/ > 方法允许您从数据源检索选定表的列列表。< c/> 参数允许您按表名限制结果。对于由 cdata 驱动程序支持的 saas、大数据和 nosql 数据源, 将根据您的配置分析现有数据结构 (无论这些是 saas api 的 rest 响应的一部分, 还是在 nosql 文档结构中找到的单个元素)。驱动程序, 以显示类似数据库的模型, 无论数据源。下面的代码示例从 salesforce 检索 “帐户” 表的列列表:
示例代码
//Collect the metadata
DatabaseMetaData sfMeta = sfConn.getMetaData();
//Retrieve the columns of the "Account" table
ResultSet rs = sfMeta.getColumns(null, null, "Account", null);
//Output the results
while (rs.next()) {
System.out.println(rs.getString("COLUMN_NAME"));
}
预期产出
Id
IsDeleted
MasterRecordId
Name
...
NumberofLocations__c
UpsellOpportunity__c
SLASerialNumber__c
SLAExpirationDate__c
请注意附加了 “_ c” 的列。这些是通过 jdbc 驱动程序从 salesforce api 检索到的自定义列。由于驱动程序动态检索元数据以检测列, 因此在重新连接时, 会反映添加或删除自定义字段。
示例代码仅显示请求表的列名。为便于参考, < cn/> 方法为检索到的每个表返回以下列:
列名称 | 数据类型 | 产品说明 |
---|---|---|
表 _ cat | 字符串 | 数据库名称。 |
表 _ scem | 字符串 | 表架构。 |
表名称 | 字符串 | 表名。 |
科伦 _ 名称 | 字符串 | 列名称。 |
数据类型 | Int | 由 java.sql.Types 中定义的常量的值标识的数据类型。 |
类型名称 | 字符串 | 驱动程序使用的数据类型名称。 |
colon _ 尺寸 | Int | 以列的字符为表示的长度或数字精度。 |
缓冲长度 | Int | 缓冲区长度。 |
十进制 _ 数字 | Int | 小数点右侧的列比例或位数。 |
num _ prec _ radix | Int | 半径或基部。 |
空 | Int | 列是否可以包含由以下 jdbc 数据库元数据常量定义的 null: 列 non杆菌 (0) 或列 null 可 (1)。 |
言论 | 字符串 | 列说明。 |
colon _ def | 字符串 | 列的默认值。 |
sql _ data _ type | Int | 由规范保留。 |
sql _ dateime _ sub | Int | 由规范保留。 |
char _ octet _ length | Int | 二进制列和基于字符的列的最大长度 |
通过为数据源发现的表和列, 您就可以开始对数据执行明智的分析、转换和其他操作了。
通用元数据发现
借助适用于110多个不同 saas、大数据和 nosql 数据源的 jdbc 驱动程序, cdata 使您能够轻松地发现数据源的元数据。由于所有驱动程序都遵循 jdbc 标准, 因此无论数据源如何, 元数据查询都将保持一致。得益于创新的数据处理功能, cdata 驱动程序甚至能够为您的 nosql 数据提供可靠的类似数据库的模型。下载任何 jdbc 驱动程序的30天免费试用版,并亲自查看 cdata 差异。