在SQLite Android Studio中更新单行

时间:2018-11-16 15:37:53

标签: android-sqlite

所以我正尝试使用以下方法更新sql数据库的一行

public boolean modiService(String name, String price, String updatename, String updateprice ){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COLUMN_NAME, updatename);
    cv.put(COLUMN_RATE, updateprice);
    db.update(TABLE_SERVICE, cv, COLUMN_NAME + " = ?" , new String[] {name});
    return true;

}

但是,无论何时调用该函数,它都会更新所有行。我试图在“ update”方法中更改值,但无法使其正常工作

1 个答案:

答案 0 :(得分:0)

您显示的代码没有本质上的错误。下面的示例利用了您显示的确切代码,可以正常工作。

因此,您的问题是由其他未提供的代码引起的,或是由您用来确定没有数据更新的方法引起的。

对于此测试,以下是SQLiteOpenHelper子类的类的代码,在本例中为 ServiceDBHelper.java :-

public class ServiceDBHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "service.db";
    public static final int DBVERSION = 1;
    public static final String TABLE_SERVICE = "service";
    public static final String COLUMN_NAME = "name";
    public static final String COLUMN_RATE = "rate";

    public ServiceDBHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String crt_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_SERVICE + "(" +
                COLUMN_NAME + " TEXT PRIMARY KEY, " +
                COLUMN_RATE + " TEXT" +
                ")";
        db.execSQL(crt_sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {

    }

    public long insertService(String name, String price) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_NAME,name);
        cv.put(COLUMN_RATE,price);
        return db.insert(TABLE_SERVICE,null,cv);
    }

    public boolean modiService(String name, String price, String updatename, String updateprice ){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_NAME, updatename);
        cv.put(COLUMN_RATE, updateprice);
        db.update(TABLE_SERVICE, cv, COLUMN_NAME + " = ?" , new String[] {name});
        return true;
    }

    public void logService(String description) {
        String TAG = "LOGSERVICE";
        Log.d(TAG,"Logging information for the Service Table for " + description);
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor csr = db.query(TABLE_SERVICE,null,null,null,null,null,null);
        Log.d(TAG,"Number of rows in the " + TABLE_SERVICE + " table is " + String.valueOf(csr.getCount()));
        while (csr.moveToNext()) {
            Log.d(TAG,
                    "Column " + COLUMN_NAME + " has a value of " + csr.getString(csr.getColumnIndex(COLUMN_NAME)) +
                    ".  Column " + COLUMN_RATE + " has a value of " + csr.getString(csr.getColumnIndex(COLUMN_RATE))
            );
        }
        csr.close();
    }
}
  • 您可以看到modiService方法与您的代码相同。
  • 其他代码已添加到:-
    • 在创建数据库时创建表(命名服务)。
    • 将行插入表中以添加一些测试数据。
    • 将数据从表写入日志。

以下是活动中用于  -插入一些行,  -显示行  -更新(修改行)  -显示行

MainActivity.java 中使用的代码为:-

public class MainActivity extends AppCompatActivity {

    ServiceDBHelper mDBHlpr;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDBHlpr = new ServiceDBHelper(this);
        mDBHlpr.insertService("Fred","125.45");
        mDBHlpr.insertService("Mary","99.75");
        mDBHlpr.insertService("Harry","245.34");
        mDBHlpr.logService("After initial inserts");
        mDBHlpr.modiService("Mary","99.75","Susan","333.33");
        mDBHlpr.logService("After Updating Mary to Susan");
    }
}

日志中的相关输出为:-

11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Logging information for the Service Table for After initial inserts
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Number of rows in the service table is 3
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Fred.  Column rate has a value of 125.45
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Mary.  Column rate has a value of 99.75
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Harry.  Column rate has a value of 245.34
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Logging information for the Service Table for After Updating Mary to Susan
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Number of rows in the service table is 3
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Fred.  Column rate has a value of 125.45
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Susan.  Column rate has a value of 333.33
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Harry.  Column rate has a value of 245.34

可以看到,使用 modiService 方法将 Mary 99.75 行更改为 Susan 333.33