Java 尝试使用JDBC测试MySQL数据库中是否存在特定表时出错

Java 尝试使用JDBC测试MySQL数据库中是否存在特定表时出错,java,mysql,jdbc,resultset,database-metadata,Java,Mysql,Jdbc,Resultset,Database Metadata,我想检查使用JDBC的Java程序的MySQL表中是否存在名为basestation的表。我的代码是: conn = DriverManager.getConnection(url, username, password); DatabaseMetaData dbm = conn.getMetaData(); tables = dbm.getTables(null, null, "basestations", null); if (tables.next()) { //Ta

我想检查使用JDBC的Java程序的MySQL表中是否存在名为
basestation
的表。我的代码是:

conn = DriverManager.getConnection(url, username, password);

DatabaseMetaData dbm = conn.getMetaData();

tables = dbm.getTables(null, null, "basestations", null);

if (tables.next())
{   
     //Table exists in database
     //...
}
else
{
     //Table does not exist
     //...
}

但是,尽管我的数据库中存在表
基站
,但我的代码似乎从未进入第一个子句,总是决定表不存在,这自然会导致数据库中已经存在一个
在尝试从头创建表时出现SQL错误。

我怀疑您的getTables()这里什么也不退。根据getTables文档只返回与目录、架构、表名和类型标准匹配的表描述。在您的情况下,catalog和schema为null,这可能不正确(我猜),请使用正确的值填充它们。

我怀疑您的getTables()在这里没有返回任何内容。根据getTables文档只返回与目录、架构、表名和类型标准匹配的表描述。在您的情况下,目录和模式为空,这可能不正确(我猜),请使用正确的值填充它们。

下面不是最好的方法。。但您可以执行以下操作:

使用JDBC发送以下语句:

select count(*) from information_schema.tables where information_schema.table_schema='your_schema' and information_schema.table_name='basestations';
解析jdbc结果集


应该返回1或0。如果结果计数为1,则该表存在,否则不存在。

这不是下面执行此操作的最佳方法。。但您可以执行以下操作:

使用JDBC发送以下语句:

select count(*) from information_schema.tables where information_schema.table_schema='your_schema' and information_schema.table_name='basestations';
解析jdbc结果集


应该返回1或0。如果结果计数为1,则该表存在,否则它不存在。

能否为
getTables(null,null,null,null)提供输出?如果使用
“基站”
“`BASESTATIONS`”
,会发生什么情况?能否提供
getTables的输出(null,null,null,null)?如果使用
“基站”
“`BASESTATIONS`”
,会发生什么情况?阅读文档:
null
表示“忽略过滤器的这一部分”。@thinkstip:不,它肯定会返回一些内容阅读文档:
null
表示“忽略过滤器的这一部分”。@thinkstip:不,它肯定会返回一些内容