题
如何使用JDBC删除Apache Derby DB上架构中的所有表?
解决方案
对于执行此操作的实际代码,请检查 CleanDatabaseTestSetup.java 。
其他提示
感谢博客:
第1步:
运行SQL语句,但不要忘记在下面的2次出现中将模式名称“APP”替换为您的模式名称:
SELECT
'ALTER TABLE '||S.SCHEMANAME||'.'||T.TABLENAME||' DROP CONSTRAINT '||C.CONSTRAINTNAME||';'
FROM
SYS.SYSCONSTRAINTS C,
SYS.SYSSCHEMAS S,
SYS.SYSTABLES T
WHERE
C.SCHEMAID = S.SCHEMAID
AND
C.TABLEID = T.TABLEID
AND
S.SCHEMANAME = 'APP'
UNION
SELECT 'DROP TABLE ' || schemaname ||'.' || tablename || ';'
FROM SYS.SYSTABLES
INNER JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID
where schemaname='APP';
第2步:
上面执行的结果是一组SQL语句,将它们复制到SQL编辑器,执行它们,然后删除约束和表。
在执行
的java中执行一些方法DROP TABLE [tablename]
tablename
由参数传递。
另一种循环查询形成的记录集的方法
SELECT tablename FROM SYSTABLES
调用第一种方法。
我认为大多数数据库提供程序不允许DROP TABLE *(或类似)。
我认为最好的方法是SHOW TABLES,然后通过结果集遍历循环中的每个删除。
HTH。
JDBC允许您以数据库无关的方式解决您的任务:
- 打开连接
- 抓住DatabaseMetaData
- 使用它列出数据库中的所有表 JavaDoc
- 迭代结果集并为每个表激发DROP TABLE 醇>
- 您必须从Derby DB系统目录中生成架构和表名。
- 按关系排序所有表格。
- 为drop all tables 生成java语句
- 使用autoCommit()方法并将此方法设置为false。当出现错误时进行手动提交或回滚事务。
- 运行java进程。 祝你好运。 醇>
更简单的解决方案是使用JDBC来运行“drop database foo”。然后“创建数据库foo”。但是,这将导致删除DB中的所有对象(即不仅仅是表格)。
如果你是从命令提示符而不是通过JDBC工作,那么这应该让你开始。
SELECT 'DROP TABLE ' || schemaname ||'.' || tablename || ';'
FROM SYS.SYSTABLES
INNER JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID
;
一个简单的解决方案是右键单击 - >断开然后删除包含数据库的文件夹并重新连接。
从 http://squirrel-sql.sourceforge.net/ 下载Squirrel SQL
连接数据库。
展开TABLE节点。
选择要删除的表格。
右键单击并选择 - >脚本 - >删除表脚本
运行生成的查询
您甚至可以选择删除记录来清空所选表格。
不隶属于 StackOverflow