如果数据库表中存在数据则获取

时间:2012-06-15 10:21:42

标签: android sqlite

  

可能重复:
  Fetch data in database table insert it if not exist else return the row id

我尝试获取数据库表中是否存在数据,如果是,我应该获取行id,否则我将其插入表中这个我的代码

public int finddate(String date){
    int id=0;
    AndroidOpenDbHelper androidOpenDbHelperObj = new AndroidOpenDbHelper(this);
    SQLiteDatabase sqliteDatabase = androidOpenDbHelperObj.getWritableDatabase();
    Cursor cursor = sqliteDatabase.rawQuery("SELECT _id FROM " + 
                            AndroidOpenDbHelper.TABLE_DATE + " where " +
                            AndroidOpenDbHelper.COLUMN_NAME_DATE + " = " + date,
                            null);
    startManagingCursor(cursor);
    if (cursor != null) { 
        if( cursor.moveToFirst() ) {
            id = cursor.getInt(cursor.getColumnIndex("_id"));
        }
    } else { 
        id=0;
    }
    sqliteDatabase.close(); 
    return id;          
}

当我尝试使用现有项目时,我得到此方法的结果= 0并且该项目被插入表格中, 我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您的查询应如下所示:

Cursor cursor = sqliteDatabase.rawQuery("SELECT _id FROM " + AndroidOpenDbHelper.TABLE_DATE + " where "+ AndroidOpenDbHelper.COLUMN_NAME_DATE+ " =\'"+date+"\'", null);
startManagingCursor(cursor);
cursor.moveTofirst();

if (cursor.getCount() > 0) { 

        id = cursor.getInt(cursor.getColumnIndex("_id"));
    }
} else { 
    id=0;
}

答案 1 :(得分:0)

date未正确转义。解决它的最安全和最干净的方法是将日期值作为参数传递,而不是将其嵌入查询中。

你也可以整理光标管理。您不需要检查null游标,因为如果查询失败将抛出异常。此外,您不需要设置id = 0,因为您已经在开始时已经这样做了。这更简单:

Cursor cursor = sqliteDatabase.rawQuery("SELECT _id FROM " + 
                        AndroidOpenDbHelper.TABLE_DATE + " where " +
                        AndroidOpenDbHelper.COLUMN_NAME_DATE + " = ?",
                        new String[] { date } );

if ( cursor.moveToFirst() ) {
    id = cursor.getInt(cursor.getColumnIndex("_id"));
}

cursor.close();
sqliteDatabase.close();