Java 使用JDBC检查表是否存在
我的数据库中有一个名为test2的表。现在我想检查它是否存在于java代码中。我编写了这些代码来检查表是否存在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.
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-请告诉我们为什么要检查代码中是否存在表。