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