sqlite会自动维护一个系统表sqlite_master,该表存储了我们所创建的各个table, view, trigger等等信息。有时数据库升级时,由于等等原因,我们可能需要增加表、字段等等。可以采取以下方法来判断数据库中是否存在某表、字段等等。
select
*
from
sqlite_master
where
type =
'table'
and
name =
'表名'
如果查不到指定表名的信息,则表示该表不存在
如果查不到指定表名的信息,则表示该表不存在
sqlite_master表数据字段:
type: 类型,取值一般为table, view
name:
tbl_name: 表名
rootpage:
sql: 创建表或者视图的sql语句,可以从该sql语句中判断某字段是否存在
/**
* 判断某表里某字段是否存在
*
* @param db
* @param tableName
* @param fieldName
* @return
*/
private boolean isFieldExist(SQLiteDatabase db, String tableName, String fieldName) {
String queryStr = "select sql from sqlite_master where type = 'table' and name = '%s'";
queryStr = String.format(queryStr, tableName);
Cursor c = db.rawQuery(queryStr, null);
String tableCreateSql = null;
try {
if (c != null && c.moveToFirst()) {
tableCreateSql = c.getString(c.getColumnIndex("sql"));
}
} finally {
if (c != null)
c.close();
}
if (tableCreateSql != null && tableCreateSql.contains(fieldName))
return true;
return false;
}