Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDBI枚举数据库表_Java_Mysql_Jdbc_Dropwizard_Jdbi - Fatal编程技术网

Java 使用JDBI枚举数据库表

Java 使用JDBI枚举数据库表,java,mysql,jdbc,dropwizard,jdbi,Java,Mysql,Jdbc,Dropwizard,Jdbi,有没有一种方法可以使用JDBI获取模式中包含哪些表的信息 我有两个数据库A和B,我需要能够 handle.execute("show tables"); 查询并从中检索表列表 查询B并检查这些相同的表是否存在并且具有相同的定义(我不关心表中的数据) 我可以使用命令行中的mysqldump执行此操作:从每个数据库检索createtable语句并比较它们。但现在我需要在Dropwizard/JDBI上下文中作为测试的一部分来做 文档有点稀疏,但我找不到任何适合我做的东西。我也许能 handle.e

有没有一种方法可以使用JDBI获取模式中包含哪些表的信息

我有两个数据库A和B,我需要能够

handle.execute("show tables");
  • 查询并从中检索表列表
  • 查询B并检查这些相同的表是否存在并且具有相同的定义(我不关心表中的数据)
  • 我可以使用命令行中的
    mysqldump
    执行此操作:从每个数据库检索
    createtable
    语句并比较它们。但现在我需要在Dropwizard/JDBI上下文中作为测试的一部分来做

    文档有点稀疏,但我找不到任何适合我做的东西。我也许能

    handle.execute("show tables");
    
    等等,但这似乎有点低,我希望有更好的方法


    或者我需要求助于JDBC吗?

    JDBC有几个独立于数据库提供程序的机制

    您可以从连接中获取,并通过表达式对其执行查询(null=any)


    注意:这里的名字可能是区分大小写的。

    我自己也遇到过这个问题。JDBI不提供高级API来完成您的要求,因此您需要使用JDBCAPI。也就是说,如果您不知道,JDBI提供对底层
    连接
    对象的访问,作为JDBC的入口点:

    DBI-DBI=。。。;
    try(handleh=dbi.open()){
    try(连接c=h.getConnection()){
    try(ResultSet tables=c.getMetaData().getColumns(null,架构,“%”,“%”){
    //在此处循环列/表。。。
    }
    }
    }
    
    根据您的需求,您还可以查看一个功能,该功能可实现您的开箱即用功能:

    liquibase.sh --driver=oracle.jdbc.OracleDriver \
            --url=jdbc:oracle:thin:@testdb:1521:test \
            --username=bob \
            --password=bob \
        diff \
            --referenceUrl=jdbc:oracle:thin:@localhost/XE \
            --referenceUsername=bob \
            --referencePassword=bob