Android:检查 sqlite table 是否存在总是 returns true
Android: Checking for sqlite table existence always returns true
我有这个方法可以检查 table 是否存在于该数据库中或 not.However 它总是 return 为真。
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,导致方法 return true
.
无论我给什么 table 名称,这个方法总是 return 正确。
调试控制台的截图如下:
此时游标计数为 -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 总是假的。
我哪里做错了?
SELECT COUNT(*)
将始终 return 一项。不要查看 getCount()
,而是移动到第 0 个位置并调用 getInt(0)
来检索 SELECT COUNT(*)
生成的值。在那里,您可能正在寻找 0 或 1。
我有这个方法可以检查 table 是否存在于该数据库中或 not.However 它总是 return 为真。
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,导致方法 return true
.
无论我给什么 table 名称,这个方法总是 return 正确。
调试控制台的截图如下:
此时游标计数为 -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 总是假的。
我哪里做错了?
SELECT COUNT(*)
将始终 return 一项。不要查看 getCount()
,而是移动到第 0 个位置并调用 getInt(0)
来检索 SELECT COUNT(*)
生成的值。在那里,您可能正在寻找 0 或 1。