带有 Sqlite 的 Android - 如何检查表是不是存在以及是不是为空
Posted
技术标签:
【中文标题】带有 Sqlite 的 Android - 如何检查表是不是存在以及是不是为空【英文标题】:Android with Sqlite - How to check if table exist and if empty带有 Sqlite 的 Android - 如何检查表是否存在以及是否为空 【发布时间】:2016-09-13 02:43:09 【问题描述】:如果表格不存在或表格内容为空,我想显示一个警告框。
要检查我正在使用的表是否为空:
cCheckDB = db.rawQuery("SELECT COUNT(*) FROM " + MainActivity.TABLE_NAME +"", null);
if (cCheckDB != null)
cCheckDB.moveToFirst();
if (cCheckDB.getInt (0) == 0)
// EMPTY
但是如何将其包装在“如果表存在”中?最好的方法是什么?
我知道检查表是否存在或检查表中是否有内容的两种方法。但如果可能的话,我想以一种有意义的方式使用检查,而不是在单个查询中使用 - 这是我的问题。
【问题讨论】:
请查看此流程***.com/questions/3058909/… 当然我可以捕获异常或创建如果不存在,但这对我的情况没有帮助。我以为还有另一种方法 【参考方案1】:希望,这对你有帮助。 效果很好!!!
public boolean isTableExists(String tableName, boolean openDb)
if(openDb)
if(mDatabase == null || !mDatabase.isOpen())
mDatabase = getReadableDatabase();
if(!mDatabase.isReadOnly())
mDatabase.close();
mDatabase = getReadableDatabase();
Cursor cursor = mDatabase.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
if(cursor!=null)
if(cursor.getCount()>0)
cursor.close();
return true;
cursor.close();
return false;
【讨论】:
它的工作。之后我可以用它来检查表是否为空 它只检查表是否存在。 我想合并这两项检查,但看起来这是不可能的。所以我将使用这个函数和一个 if 子句来检查之后的内容。这对我来说是最好的解决方案【参考方案2】:要检查您的表是否存在,您可以使用:
SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';
在此处,将 table_name 替换为您要更改的表名
前:
SELECT name FROM sqlite_master WHERE type='table' AND name='Employee_Details';
【讨论】:
检查我编辑的答案。如果该表存在,它会给你结果 所以我必须分开一张表检查和一张表是否为空。没有其他方法可以将这两项检查结合起来吗? 如果表不存在则不需要检查它是否为空而不是检查***.com/questions/22630307/… 如果我在不存在的表上使用选择查询将得到一个空指针 您需要做的是,首先检查表是否存在,然后您可以检查该表中的数据。+【参考方案3】:更优化的方法是先检查表是否存在,然后再检查记录是否存在
private void clearTable(String tableName)
int count;
Cursor cursor = db.rawQuery("SELECT count(*) FROM sqlite_master WHERE type='table' AND " +
"name= " + tableName, null);
cursor.moveToFirst();
count = cursor.getInt(0);
if (!cursor.isClosed())
cursor.close();
if (count > 0)//table exist now delete record if it exist
cursor=db.rawQuery("select exists(select 1 FROM " + tableName + ")", null);
cursor.moveToFirst();
count = cursor.getInt(0);
if (!cursor.isClosed())
cursor.close();
if (count > 0)
db.execSQL("delete from " + tableName);
【讨论】:
有什么线索可以将两者结合起来有意义吗?这就是我想知道的:) 检查我编辑的答案我在 Firefox 的 sqlite 工具中测试过 您需要先检查表是否存在而不是检查记录是否存在,因为没有组合查询可以同时检查表的存在性和记录。直到我搜索。以上是关于带有 Sqlite 的 Android - 如何检查表是不是存在以及是不是为空的主要内容,如果未能解决你的问题,请参考以下文章
DataNucleus 支持带有内置 sqlite 或远程数据库的 android?
带有 SQLite 的 Android 应用程序在 ICS 中运行,但在 Jelly Bean 中不运行 - IllegalStateException