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");
}
}