2015-10-25 2 views
0

У меня возникла проблема с функцией. У меня есть функция, чтобы найти max (id) таблицы, и она работает, но с другой таблицей она не работает. Во-первых, моя база данных:Android cursor.getInt

`//MAGASIN 
public static final String MAGASIN_TABLE_CREATE = "CREATE TABLE "+ MAGASIN_TABLE_NAME + " ("+ 
      MAGASIN_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      MAGASIN_NOM + " TEXT NOT NULL, " + 
      MAGASIN_ADRESSE + " TEXT);";` 

`

//LISTE` 

    public static final String LISTE_TABLE_CREATE = "CREATE TABLE "+ LISTE_TABLE_NAME + " (" + 
      LISTE_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
      LISTE_NAME + " TEXT NOT NULL, "+ 
      LISTE_DATE_CREATION + " TEXT, "+ 
      LISTE_DATE_LAST_MODIFICATION + " TEXT, "+ 
      LISTE_IS_FINAL + " INTEGER, " + 
      LISTE_NUM_MAGASIN + " INTEGER, " + 
      "FOREIGN KEY("+ LISTE_NUM_MAGASIN +") REFERENCES MAGASIN("+ MAGASIN_KEY +"));"; 

После того, что моя первая функция, которая работает:

public int selectMaxNumMagasin() 
{ 
    Cursor cursor = mDb.rawQuery("select numMagasin as _id from magasin order by _id desc limit 1",null); 
    int max; 
    if (cursor == null) 
    { 
     max = 1; 
     return max; 
    } 
    else 
    { 
     cursor.moveToFirst(); 
     max = cursor.getInt(0) + 1; 
     cursor.close(); 
     return max; 
    } 
} 

И, наконец, последний из которых не делает работы

`

public int selectMaxNumListe() 
    { 
     Cursor cursor = mDb.rawQuery("select numListe as _id from liste order by _id desc limit 1",null); 
     int max; 
     if (cursor == null) 
     { 
      max = 1; 
      return max; 
     } 
     else 
     { 
      cursor.moveToFirst(); 
      max = cursor.getInt(0); 
      max += 1; 
      cursor.close(); 
      return max; 
     } 
    }` 

Я сделал несколько тестов, кажется, быть

cursor.getInt (0);

, который застрял.

Надежда кто-то найдет решение, спасибо;)

ответ

0

rawQuery() всегда возвращает действительный Cursor, или бросает исключение. Проверка на null курсор не является способом проверить, есть ли результаты.

Вместо этого проверьте значение результата moveToFirst(), чтобы проверить наличие непустого курсора.

Также обратите внимание, что вы можете полностью выполнять свою работу в SQL, например. SELECT MAX(columnname)+1 FROM tablename.

0

вы возвращаетесь всегда 2 в вашей второй функции, попытаться вернуть максимальную Intead 2

+0

Это было для проверки этой функции, это было max вместо 2 :) –

+0

, так что попробуйте проверить (cursor.moveToFirst()) {// сделать что-то}, как указано на @laalto post –

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). –

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