Android 如果表为空,需要帮助向表中插入值吗

Android 如果表为空,需要帮助向表中插入值吗,android,sqlite,Android,Sqlite,如果表不包含一行(空表),我需要向表中插入值。如果表中已有数据,则无需插入。我使用了以下代码 sampleDB = this.openOrCreateDatabase(SAMPLE_DB_NAME, MODE_PRIVATE, null); sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " + SAMPLE_TABLE_NAME + " (rowid INT , songname VARCHAR," +

如果表不包含一行(空表),我需要向表中插入值。如果表中已有数据,则无需插入。我使用了以下代码

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();

您需要像第二次查询一样将光标移动到第一个元素(如果有):即,在访问光标以获取列值之前,检查c.moveToFirst()的结果。

如果您的表为空,那么如何获取此行中的列索引0

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

if(cur.getInt(0)谢谢,我已经试过了。如果这样使用,第二次(即使表是非空的)也会插入数据。谢谢。我这样使用,第二次(即使表是非空的)也会插入数据。因为你的条件第二次也是真的“请尝试上面的编辑部分,因为由于CursorIndexOutOfBoundsException:以及如果索引-1和cur.getInt(0)出现错误获取索引0I的行值我使用了编辑过的帖子。每次只执行if部分。如果插入了if部分,则它将转到if部分,即使我在项目中也使用了这种类型的代码,如果游标返回任何计数,则它不会插入值。
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");
                        }

                }