java - 我如何从 Java 中一般检测数据库是否为 'empty'

标签 java sql-server database oracle derby

谁能提出一种检测数据库是否为空的 Java 数据库的好方法(需要至少支持 Microsoft SQL Server、Derby 和 Oracle)?

我所说的空是指如果数据库是使用新的创建数据库语句全新创建的状态,尽管如果涵盖 99% 的情况,检查不需要 100% 完美。

我的第一个想法是做这样的事情......

tables = metadata.getTables(null, null, null, null);
Boolean isEmpty = !tables.next();
return isEmpty;

...但不幸的是,这给了我一堆底层系统表(至少在 Microsoft SQL Server 中)。

最佳答案

有一些跨数据库的 SQL-92 模式查询标准——这当然因供应商而异

SELECT COUNT(*) FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_TYPE] = <tabletype>

对这些的支持因供应商而异,表格 View 的列内容也是如此。在此处找到的信息模式文档的 SQL 实现:

http://msdn.microsoft.com/en-us/library/aa933204(SQL.80).aspx

更具体地说,在 SQL Server 中,sysobjects 元数据早于 SQL92 标准倡议。

SELECT COUNT(*) FROM [sysobjects] WHERE [type] = 'U'

上面的查询返回数据库中用户表的计数。有关 sysobjects 表的更多信息:

http://msdn.microsoft.com/en-us/library/aa260447(SQL.80).aspx

关于java - 我如何从 Java 中一般检测数据库是否为 'empty',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/119011/

相关文章:

java扩展最终变量

java - 逆向工程 WebElement 的 XPath

java - lucene 4.10.2中生成多个CFS文件

SQL-Server 聚合(Count)可能不会出现在 WHERE 中

javascript - 如何部分更新 DynamoDB 表?

mysql - 如何使mysql数据库模式与h2数据库兼容

java - 在 HQL 查询中使用 getter/setter?

mysql - SQL 中 'IN' 子句中的 Case 语句

sql-server - 通过SQL Server 2008 R2中的不同客户端更新同一记录

java - 如何在应用程序启动时从 java 代码更改 Hibernate connection.url 属性