У меня есть этот метод, который проверяет, существует ли таблица в этой базе данных или нет. Однако она всегда возвращает true.Android: проверка существования таблицы sqlite всегда возвращает 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
как -1 к тому времени она достигает к if (cursor.getCount()>0){
и курсор рассчитывать стать 1, когда я шаг за breakpoint
в результате чего метод возвращения true
.
Независимо от того, что я указываю tablename, этот метод всегда возвращает true.
Вот скриншоты для отладки консоли:
На данный момент счетчик курсор -1, так что я считаю, что это не должно попасть в петлю, но она делает и счет идет на 1.
Edit: я также попробовал следующий запрос:
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 всегда ложно.
Где я делаю неправильно?
Когда я делаю cursor.getInt (0), я получаю android.database.CursorIndexOutOfBoundsException: запрашивается индекс -1 с размером 1 –
, когда вы говорите, перемещаете курсор на 0-ю позицию, вы хотите называть cursor.moveToFirst ()? –
@TejaNandamuri: Это сработает. – CommonsWare