我有这个方法来检查该数据库中是否存在表。但是它总是返回true。
public boolean checkDomainTableExists(String domain){
if (database==null||!database.isOpen()){
database=dBHelper.getReadableDatabase();
}
if (!database.isReadOnly()){
database.close();
database=dBHelper.getReadableDatabase();
}
try{
cursor=database.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[] {"table", tableName});
}catch (Exception e){
Log.d("exception",e.getLocalizedMessage());
}
if (cursor!=null){
if (cursor.getCount()>0){
cursor.close();
return true;
}
cursor.close();
}
return false;
}
当我正在调试时,我看到cursor
计数在到达if (cursor.getCount()>0){
时为-1,当我跳过breakpoint
时,光标数变为1导致方法返回true
。
无论我给出的是什么表名,这个方法总是返回true。
此时光标计数为-1,所以我认为它不应该进入循环,但是确实如此,计数变为1。
编辑:我也尝试了以下查询:
database.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '" + tableName + "'", null);
即使在这种情况下,getCount始终为1。
和
try{
cursor=database.query(tableName,null,null,null,null,null,null);
tableExists=true;
}catch (Exception e){
Log.d("exception",e.getLocalizedMessage());
}
这里bool tableExists总是假的。
我在哪里做错了?
答案 0 :(得分:2)
SELECT COUNT(*)
将始终返回一个条目。而不是查看getCount()
,移至第0位并调用getInt(0)
以检索SELECT COUNT(*)
生成的值。在那里,你可能正在寻找0或1。