2016-03-09 2 views
0

У меня есть этот метод, который проверяет, существует ли таблица в этой базе данных или нет. Однако она всегда возвращает 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.

Вот скриншоты для отладки консоли: enter image description here

На данный момент счетчик курсор -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 всегда ложно.

enter image description here

Где я делаю неправильно?

ответ

2

SELECT COUNT(*) всегда будет возвращать одну запись. Вместо того, чтобы смотреть на getCount(), перейдите в 0-ю позицию и вызовите getInt(0), чтобы получить значение, генерируемое SELECT COUNT(*). Там вы, вероятно, ищете 0 или 1.

+0

Когда я делаю cursor.getInt (0), я получаю android.database.CursorIndexOutOfBoundsException: запрашивается индекс -1 с размером 1 –

+0

, когда вы говорите, перемещаете курсор на 0-ю позицию, вы хотите называть cursor.moveToFirst ()? –

+0

@TejaNandamuri: Это сработает. – CommonsWare

Смежные вопросы