Java 使用JDBC检查表是否存在

Java 使用JDBC检查表是否存在,java,sql,javadb,Java,Sql,Javadb,我的数据库中有一个名为test2的表。现在我想检查它是否存在于java代码中。我编写了这些代码来检查表是否存在 DatabaseMetaData dbm = conn.getMetaData(); ResultSet rs = dbm.getTables(null, "APP", "test2", null); if (!rs.next()) { PreparedStatement create = conn.

我的数据库中有一个名为test2的表。现在我想检查它是否存在于java代码中。我编写了这些代码来检查表是否存在

DatabaseMetaData dbm = conn.getMetaData();
             ResultSet rs = dbm.getTables(null, "APP", "test2", null);
             if (!rs.next()) {
                 PreparedStatement create = conn.prepareStatement("create table test2(name2 varchar(33))");
                 create.executeUpdate();
             }else{
                 System.out.println("already exists");
             }

由于test2存在于应用程序架构中,因此应该执行my else。但在我的情况下,如果是被处决

Derby以大写形式存储表名(根据SQL标准的要求,许多其他DBMS也会这样做)

您还需要以大写形式传递表名

ResultSet rs = dbm.getTables(null, "APP", "TEST2", null);
驱动程序(我所知道的所有驱动程序)沿着以下路线运行:

where table_name like 'TEST2'
检索表列表。其中,
TEST2
是调用
getTables()
的未更改值。如果有一个DBMS可以进行区分大小写的字符串比较(几乎所有的DBMS都会这样做——我认为MySQL和SQL server是例外),那么显然表名必须以与存储时相同的大小写传递


但是,您可以通过引用它们来创建混合大小写表名:
创建表“FooBar”(…)
在这种情况下,您需要将
“FooBar”
传递到
getTables()

为什么要查询一个您首先不确定是否存在的表?这一点似乎非常非常不寻常。谁说我不确定它是否存在?它确实存在,我想在代码中检查它是否存在。请仔细阅读问题。@Makoto-这对我来说很有意义。如果我们有一个可能被移动或重命名的关键表,那么您希望您的代码提到这一点。例如,需要TBL_用户,但未找到。您可能会发现该表被重命名为t_customers。@BoratSagdiyev:当时,开发人员没有正确地完成他们的工作;重命名重构必须包括调整/更新表所依赖的任何现有查询。@UsmanRiaz-请告诉我们为什么要检查代码中是否存在表。