使用Apache Derby with Java(J2ME,但我认为没有区别)有没有办法检查数据库是否已经存在且包含表?
答案 0 :(得分:10)
我知道没有,除了很少有解决办法,不像我们拥有IF EXIST设施的MySQL。
你做的是,尝试连接到数据库,如果不可能它不存在。成功连接后,您可以进行简单的选择,例如SELECT count(*)FROM TABLE_NAME,以了解表是否存在。你将取决于例外。即使在Sun的官方例子中,我也看到过类似的工作。
在Oracle中,我们有字典表来了解数据库对象。我怀疑德比有没有这样的事情。
<强> [编辑] 强>
好吧,我发现有一种方法可以知道表是否存在。尝试,SELECT tablename FROM SYSTABLES。它用于检查表的存在,为了检查数据库,你可能需要做类似的事情,我在上面解释过。
答案 1 :(得分:8)
Adeel,您还可以使用Connection.getMetaData返回DatabaseMetaData对象,然后在您与数据库建立连接后使用getTables。这样做的好处是可以为任何带有JDBC驱动程序的数据库工作,这是值得的。
要检查数据库是否存在,如果以嵌入方式使用Derby,或者服务器位于同一台计算机上,则可以检查数据库的文件夹是否存在。虽然有点kludgy。我会像阿黛尔建议的那样做,并尝试连接,如果它不存在则捕获异常。
答案 2 :(得分:2)
我建议获取DatabaseMetaData对象,然后使用getTables(null,null,null,new String [] {“TABLE”})方法,它返回一个ResultSet。使用ResultSet的next()方法返回一个布尔值,以测试是否存在任何表。如果它测试为true,则表中存在表。为false,数据库为空。