将 Apache Derby 与 Java 结合使用(J2ME,但我认为这没有什么区别)有没有办法检查数据库是否已经存在并包含一个表?
3 回答
我不知道,除了很少的解决方法,不像 MySQL 那样我们有 IF EXIST 的功能。
你所做的是,尝试连接到数据库,如果不能,它可能不存在。并且在连接成功后,你可以做一个简单的选择,比如 SELECT count(*) FROM TABLE_NAME,来知道表是否存在。您将取决于例外情况。即使在 Sun 的官方示例中,我也看到过类似的工作。
在 Oracle 中,我们有字典表来了解数据库对象。我怀疑我们在德比是否有类似的东西。
[已编辑]
好吧,我发现有一种方法可以知道该表是否存在。试试,从 SYSTABLES 中选择表名。它用于检查表的存在,用于检查数据库您可能需要做类似的事情,我在上面解释过。
Adeel,您也可以使用Connection.getMetaData返回一个DatabaseMetaData对象,然后使用getTables,当然,一旦您连接到数据库。这具有适用于任何具有 JDBC 驱动程序的数据库的优势。
为了检查数据库是否存在,如果您以嵌入式方式使用 Derby,或者服务器在同一台机器上,您可以检查数据库的文件夹是否存在。虽然有点笨拙。我会按照 Adeel 的建议进行操作并尝试连接,如果异常不存在则捕获异常。
我建议获取 DatabaseMetaData 对象,然后从中使用 getTables(null, null, null, new String[]{"TABLE"}) 方法,该方法返回一个 ResultSet。使用返回布尔值的 ResultSet 的 next() 方法来测试是否存在任何表。如果它测试为真,则您有表存在。False,数据库为空。