databasemetadata 获取mysql的 table catalog 是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了databasemetadata 获取mysql的 table catalog 是啥意思相关的知识,希望对你有一定的参考价值。

参考技术A table catalog
表目录

java.sql.DatabaseMetaData.getPrimaryKeys() 返回空结果

【中文标题】java.sql.DatabaseMetaData.getPrimaryKeys() 返回空结果【英文标题】:java.sql.DatabaseMetaData.getPrimaryKeys() returns empty result 【发布时间】:2016-09-09 16:15:19 【问题描述】:

我正在开发 Spring Boot 并使用 JdbcTemplate。 我需要在运行时获取表列名。 为什么 getPrimaryKeys() 返回空记录? 我的目标数据库是 SQL Server。 我的代码在这里...

@RestController
@RequestMapping("/db")
public class WebPosDBController 

    @Autowired
    private JdbcTemplate jdbcTemplate;

    // ...

    private void loadMetadata(DBRecord dbRecord) 

    try 
        Connection conn = jdbcTemplate.getDataSource().getConnection();
        DatabaseMetaData dm = conn.getMetaData();

        ResultSet rs = dm.getPrimaryKeys(null, null, dbRecord.getTablename());
        List<String> pkNames = new ArrayList<>();
        while (rs.next()) 
            // NEVER GET HERE
            pkNames.add(rs.getString("COLUMN_NAME"));
        
        rs.close();

        rs = dm.getColumns(null, null, dbRecord.getTablename(), null);
        List<String> fieldNames = new ArrayList<>();
        while (rs.next()) 
        fieldNames.add(rs.getString("COLUMN_NAME"));
        
        rs.close();
        conn.close();
     catch (SQLException e) 
        e.printStackTrace();
    
    

    // ...

【问题讨论】:

您使用的是哪个 JDBC 驱动程序? ...微软的? ...jTDS? ...? 显示表格的 DDL 并用最简单的版本替换您的代码(即:使用硬编码值而不是 dbRecord.getTablename(),以便我们可以看到使用的值) 【参考方案1】:

您可能需要在请求主键时设置架构。

String schema = "your_schema_name"
ResultSet rs = dm.getPrimaryKeys(null, schema, dbRecord.getTablename());

您的 SQL Server 可能为您创建的所有数据库使用默认架构,可能是 dbo 或用于连接到数据库的用户名。

【讨论】:

以上是关于databasemetadata 获取mysql的 table catalog 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

我可以从 DatabaseMetaData 查询更改结果集中的获取模式吗?

jdbc-mysql基础 DatabaseMetaData 查看mysql的版本号主/次版本号

JDBCResSetMetaData&DatabaseMetaData&获取数据库主键的值

使用 JAVA 类从元数据 DatabaseMetaData 中获取特定数据库表的外键和引用表名

Java获取mysql数据库元数据

java.sql.DatabaseMetaData.getPrimaryKeys() 返回空结果