我如何可靠地在SQLite中检查特定的用户表是否存在?
我并不是要求使用不可靠的方法,比如检查表上的“select *”是否返回错误(这是一个好主意吗?)
原因如下:
在我的程序中,我需要创建并填充一些表,如果它们还不存在的话。
如果它们已经存在,我需要更新一些表。
我是否应该采取其他路径来表示已经创建了相关的表-例如,通过在磁盘上的程序初始化/设置文件中创建/放置/设置某个标志?
或者我的方法有意义吗?
我如何可靠地在SQLite中检查特定的用户表是否存在?
我并不是要求使用不可靠的方法,比如检查表上的“select *”是否返回错误(这是一个好主意吗?)
原因如下:
在我的程序中,我需要创建并填充一些表,如果它们还不存在的话。
如果它们已经存在,我需要更新一些表。
我是否应该采取其他路径来表示已经创建了相关的表-例如,通过在磁盘上的程序初始化/设置文件中创建/放置/设置某个标志?
或者我的方法有意义吗?
当前回答
如果你正在使用fmdb,我认为你可以导入FMDatabaseAdditions并使用bool函数:
[yourfmdbDatabase tableExists:tableName].
其他回答
参见(7)如何在SQLite FAQ中列出SQLite数据库中包含的所有表/索引:
SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;
如果你得到一个"table already exists"错误,在SQL字符串中做如下修改:
CREATE table IF NOT EXISTS table_name (para1,para2);
这样可以避免异常。
如果你用python文件运行它并且使用sqlite3。打开命令提示符或bash任何您正在使用的使用
首先在Python3 file_name.py中编写SQL代码。 然后执行sqlite3 file_name.db。 如果存在表,此命令将给出表。
一种变体是使用SELECT COUNT(*)而不是SELECT NAME,即。
SELECT count(*) FROM sqlite_master WHERE type='table' AND name='table_name';
如果表不存在,返回0,如果存在,返回1。这可能在你的编程中很有用,因为数值结果处理起来更快/更容易。下面说明了如何在Android中使用SQLiteDatabase, Cursor, rawQuery带参数来做到这一点。
boolean tableExists(SQLiteDatabase db, String tableName)
{
if (tableName == null || db == null || !db.isOpen())
{
return false;
}
Cursor cursor = db.rawQuery(
"SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?",
new String[] {"table", tableName}
);
if (!cursor.moveToFirst())
{
cursor.close();
return false;
}
int count = cursor.getInt(0);
cursor.close();
return count > 0;
}
在swift的数据库中,表是否存在
func tableExists(_ tableName:String) -> Bool {
sqlStatement = "SELECT name FROM sqlite_master WHERE type='table' AND name='\(tableName)'"
if sqlite3_prepare_v2(database, sqlStatement,-1, &compiledStatement, nil) == SQLITE_OK {
if sqlite3_step(compiledStatement) == SQLITE_ROW {
return true
}
else {
return false
}
}
else {
return false
}
sqlite3_finalize(compiledStatement)
}