2

如果存在另一个表,我正在尝试在数据库中删除一个表。

我使用此查询对表进行了备份:

ALTER TABLE AppProfile RENAME TO AppProfile_backup

现在我想通过以下方式恢复备份表并删除 AppProfile:

DROP TABLE AppProfile IF EXISTS TABLE AppProfile_backup
(ALTER TABLE AppProfile_backup RENAME TO AppProfile) IF NOT EXISTS AppProfile

但是,在“IF”标记附近,两行都出现语法错误。

关于这个问题的背景,我在 Android 中使用 SQLiteOpenHelper 类。您可以通过调用 [db_handler_instance].getWritableDatabase().execSQL("random query"); 在该环境中执行原始 SQL。

4

2 回答 2

1

用 Java 做这个怎么样?您可以查询数据字典...

String sql = "SELECT 1 "
           + "  FROM sqlite_master  " 
           + " WHERE type = 'table' "
           + "   AND name = 'AppProfile_backup'";

Cursor cursor = db.rawQuery(sql, null);

...如果备份表存在,则删除该表:

if (cursor.moveToNext())
    db.execSQL("DROP TABLE AppProfile;");
else
    db.execSQL("ALTER TABLE ...");
于 2013-08-07T20:50:42.007 回答
0

您需要通过在数据库的定义中查找表来检查表是否存在,如下所示应该可以解决问题

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
于 2013-08-07T20:45:32.303 回答