想要从SqLite创建,更新和检索数据

时间:2018-01-30 06:41:38

标签: android database sqlite android-sqlite

对于创建表:

private static void createAllTables(SQLiteDatabase database) {

    database.execSQL(" CREATE TABLE IF NOT EXISTS " + IN_RIDE_DATA + " (" + USER_ID + " REAL NOT NULL" +"," + TOTAL_DISPLACEMENT_DISTANCE + " REAL NOT NULL" + "" + ");");
}

对于更新表,想要只保存位移,所以我每次都更新,因为我想覆盖数据。

public void insertTotalDisplacement(String userID, Double displacement) {
    try {
        ContentValues contentValues = new ContentValues();
        contentValues.put(NewDatabaseForInRideData.USER_ID, userID); //User phone No used as a USER ID
        contentValues.put(NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE, displacement);

       database.update(NewDatabaseForInRideData.IN_RIDE_DATA,contentValues, NewDatabaseForInRideData.USER_ID+" = "+userID, new String [] {});


    } catch (Exception e) {
        e.printStackTrace();
    }
}

对于检索数据,我使用了几种方法来执行此操作,但数据未保存在数据库中而未从数据库中检索。

    public Cursor getTotalDisplacementDistance() {
    Cursor cursor=null;
    try {
        String[] columns = new String[]{NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE};
       //  cursor = database.rawQuery(NewDatabaseForInRideData.IN_RIDE_DATA, columns, null, null, null, null, null);
        //choice = String.valueOf(cursor.getDouble(cursor.getColumnIndex(NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE)));

        Cursor cur=database.rawQuery("SELECT "+NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE+" where "+NewDatabaseForInRideData.USER_ID+" = " +1+ " from"+NewDatabaseForInRideData.IN_RIDE_DATA,new String [] {});
        //Cursor cur=database.rawQuery("SELECT * from IN_RIDE_DATA",new String [] {});


        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    } catch (Exception e) {
        e.printStackTrace();
        return cursor;
    }
}

3 个答案:

答案 0 :(得分:2)

问题在于getTotalDisplacementDistance方法,你使用的是两个游标变量,一个有查询结果,另一个是null,你正在处理一个空值。

相应地更新,

public Cursor getTotalDisplacementDistance() {
    Cursor cursor=null;
    try {

        cursor = database.rawQuery("SELECT " + NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE + " from IN_RIDE_DATA  where " + NewDatabaseForInRideData.USER_ID + " = ?", new String[] {"1"});

        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    } catch (Exception e) {
        e.printStackTrace();
        return cursor;
    }
}

答案 1 :(得分:0)

你可以试试这个

String selectQuery = "SELECT  * FROM " + IN_RIDE_DATA;
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction();
Cursor cursor = db.rawQuery(selectQuery, null);

// looping through all rows and adding to list
if (cursor.moveToFirst()) {
    do {
        Contact contact = new Contact();
        contact.setID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(NewDatabaseForInRideData.USER_ID))));
        contact.setName(cursor.getString(cursor.getColumnIndex(NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE))));            

        // Adding data to your list
        list.add(contact);
    } while (cursor.moveToNext());
    db.setTransactionSuccessful();
}
db.endTransaction();

修改

  

使用模型类设置数据

答案 2 :(得分:0)

我改变了这些事情

创建

private static void createAllTables(SQLiteDatabase database) {

    //database.execSQL(" CREATE TABLE IF NOT EXISTS " + IN_RIDE_DATA + " (" + USER_ID  +"," + TOTAL_DISPLACEMENT_DISTANCE  + "" + ");");

    database.execSQL(" CREATE TABLE IF NOT EXISTS " + IN_RIDE_DATA + " ("
            + TOTAL_DISPLACEMENT_DISTANCE + " TEXT, "
            + USER_ID + " TEXT"+");");

}

删除

public void deleteDriverLocData() {
    try {
        database.delete(NewDatabaseForInRideData.IN_RIDE_DATA, null, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

插入

public void insertDisplacement(String id, String displacement) {
    try {
        deleteDriverLocData();
        ContentValues contentValues = new ContentValues();
        contentValues.put(NewDatabaseForInRideData.USER_ID, id);
        contentValues.put(NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE, displacement);
        database.insert(NewDatabaseForInRideData.IN_RIDE_DATA, null, contentValues);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

退休

public String getDisplacement() {
    try {
        String[] columns = new String[]{NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE};
        Cursor cursor = database.query(NewDatabaseForInRideData.IN_RIDE_DATA, columns, null, null, null, null, null);
        cursor.moveToFirst();
        String totaldisplacement = cursor.getString(cursor.getColumnIndex(NewDatabaseForInRideData.TOTAL_DISPLACEMENT_DISTANCE));
        return totaldisplacement;
    } catch (Exception e) {
        e.printStackTrace();
        return "";
    }
}