使用JDBC检查表是否存在

时间:2014-09-27 04:39:54

标签: java sql javadb

我的数据库中有一个名为 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存在于APP模式中,我的其他应该被执行。但在我的情况下,如果正在执行。

1 个答案:

答案 0 :(得分:1)

Derby以大写形式存储表名(根据SQL标准的要求,并由许多其他DBMS完成)

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

ResultSet rs = dbm.getTables(null, "APP", "TEST2", null);

驱动程序(我所知道的所有驱动程序)都在运行:

where table_name like 'TEST2'

检索表列表。其中TEST2是调用getTables()时未更改的值。如果你有一个DBMS做区分大小写的字符串比较(几乎所有DBMS都这样做 - 我认为MySQL和SQL服务器是例外),那么显然表名必须在存储的情况下传递。

但是可以 通过引用来创建混合大小写的表名:create table "FooBar" (...)在这种情况下,您需要将"FooBar"传递给getTables()