Нужна помощь для вставки значений в таблицу, если таблица пуста - PullRequest
0 голосов
/ 19 января 2012

Мне нужно вставить значения в таблицу, если она не содержит ни одной строки (пустая таблица). Если данные уже присутствуют в таблице, вставлять не нужно. Я использовал следующий код.

sampleDB = this.openOrCreateDatabase(SAMPLE_DB_NAME, MODE_PRIVATE, null);
        sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " + SAMPLE_TABLE_NAME
                + " (rowid INT , songname VARCHAR," + "  count INT);");
        int len = MP3Activity.songlist.size();
        Log.v("songlist len", Integer.toString(len));           
        cur = sampleDB.rawQuery("SELECT COUNT(*)  FROM "+ SAMPLE_TABLE_NAME ,null);
        if (cur != null) {
                if(cur.getInt(0)<=1) //exception at this line.
                    {
                        for (int s = 0; s < MP3Activity.songlist.size(); s++) {
                            Log.v("Before insert", "1");
                                sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ("
                                        + row_id++ + ",\"" + MP3Activity.songlist.get(s) + "\","
                                        + count + ");");        
                                Log.v("After insert", "1");
                            }
                    }
                    else
                    {
                        Log.v("inside else......","");
                    }

            }           

        cur.close();        

         c = sampleDB.rawQuery("SELECT songname, count, rowid FROM "
                + SAMPLE_TABLE_NAME + " where count=0 ", null);

        if (c != null) {
            if (c.moveToFirst()) {
                do {
                    String songName = c.getString(c.getColumnIndex("songname"));
                    int count = c.getInt(c.getColumnIndex("count"));
                    int rid=c.getInt(c.getColumnIndex("rowid"));
                    results.add("Rowid: " + rid + ",Song Name: " + songName + ",Count: " + count);
                } while (c.moveToNext());
            }
        }
        c.close();
        int reslen = results.size();
        Log.v("Length of result", Integer.toString(reslen));

        for (int i = 0; i < results.size(); i++) {
            Log.v("Element in result", results.get(i));
        }
        /*for (int k = 0; k < results.size(); k++) {

            if (sampleDB != null)
                sampleDB.execSQL("DELETE  FROM " + SAMPLE_TABLE_NAME);

        }*/
        sampleDB.close();

Я получил следующее исключение.

01-19 15:22:42.059: E/AndroidRuntime(464): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
01-19 15:22:42.059: E/AndroidRuntime(464):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
01-19 15:22:42.059: E/AndroidRuntime(464):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:172)
01-19 15:22:42.059: E/AndroidRuntime(464):  at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84)
01-19 15:22:42.059: E/AndroidRuntime(464):  at com.mp3.Frequent.onCreate(Frequent.java:46)
01-19 15:22:42.059: E/AndroidRuntime(464):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
01-19 15:22:42.059: E/AndroidRuntime(464):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)

Ответы [ 2 ]

0 голосов
/ 19 января 2012

если ваша таблица пуста, то как вы можете получить индекс столбца 0 в этой строке

if(cur.getInt(0)<=1) //exception at this line.  

, поэтому замените его на

if(cur.getCount()<=1) //exception at this line.

РЕДАКТИРОВАТЬ:
вместо проверкиВыше условие также можно проверить, как это

if(cur.getCount()>0) //exception at this line.
       {
//Already Inserted value
     }
         else
            {
                    for (int s = 0; s < MP3Activity.songlist.size(); s++) {
                        Log.v("Before insert", "1");
                            sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ("
                                    + row_id++ + ",\"" + MP3Activity.songlist.get(s) + "\","
                                    + count + ");");        
                            Log.v("After insert", "1");
                        }

                }
0 голосов
/ 19 января 2012

Вам нужно переместить курсор к первому элементу (если есть), как вы делаете для второго запроса: то есть проверьте результат c.moveToFirst (), прежде чем обращаться к курсору для значений столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...