如何更新SQLite中的特定行?

时间:2014-04-07 15:23:53

标签: java database sqlite sql-update

我正在尝试更新用户当前的信用,但我不想替换该值,只需在微调器中添加一个选定的金额并将其添加到用户当前的信用额度中?谢谢。

我的数据库代码?

package com.example.parkangel;

public class UDbHelper extends SQLiteOpenHelper
{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_PFNAME = "payeeFname";
    public static final String KEY_PSNAME = "payeeSname";
    public static final String KEY_CARD = "card";
    public static final String KEY_CREDITS = "credits";

    private static final String DATABASE_NAME = "UserData.db";
    private static final String DATABASE_TABLE = "UserTable";
    private static final int DATABASE_VERSION = 1;

    //private UDbHelper dbHelper;
    //private final Context ourContext;
    private static UDbHelper instance;
    private SQLiteDatabase ourDatabase;

    public UDbHelper(Context context) 
    {   
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public static UDbHelper getInstance(Context context)
    {
        if (instance == null)
        {
            instance = new UDbHelper(context);  
        }
        return instance;
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_PFNAME + " TEXT NOT NULL, " + KEY_PSNAME + " 
                                    TEXT NOT NULL, " +
                KEY_CARD + " INTEGER NOT NULL, " + KEY_CREDITS + " 
                                    INTEGER NOT NULL);");   

        ContentValues values = new ContentValues();
        values.put(KEY_PFNAME, "Tutku"); 
        values.put(KEY_PSNAME, "Erbil");
        values.put(KEY_CARD, "12345677"); 
        values.put(KEY_CREDITS, 5);
        db.insert(DATABASE_TABLE, null, values);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {

        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }

    public synchronized UDbHelper open() throws SQLException
    {
        System.out.println ("running open");
        if(ourDatabase == null || !ourDatabase.isOpen())
        ourDatabase = getWritableDatabase();
        return this;
    }   

    public String getData() 
    {
        // TODO Auto-generated method stub
        String[] columns = new String[] {KEY_ROWID, KEY_PFNAME, KEY_PSNAME,
            KEY_CARD, KEY_CREDITS};
        Cursor  c = ourDatabase.query(DATABASE_TABLE, columns, null, null, 
                                                 null, null, null);
        String result = " ";

        int iRow = c.getColumnIndexOrThrow(KEY_ROWID);
        int iPFname = c.getColumnIndexOrThrow(KEY_PFNAME);
        int iPSname = c.getColumnIndexOrThrow(KEY_PSNAME);
        int iCard = c.getColumnIndexOrThrow(KEY_CARD);
        int iCredits = c.getColumnIndexOrThrow(KEY_CREDITS);

        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            result = result + c.getString(iRow) + " " + 
                            c.getString(iPFname) + " " +
            c.getString(iPSname) + " " + c.getString(iCard) + " " +
            c.getString(iCredits) + "\n";
        }
        return result;
    }

    public void upDateUser(String money) {
        // TODO Auto-generated method stub
        ContentValues cvUpdate = new ContentValues();
        cvUpdate.put(KEY_CREDITS, money);
        ourDatabase.update(DATABASE_TABLE, cvUpdate, null, null);
    }
}

需要执行actoin的类:

package com.example.parkangel;  

public class Balance extends Activity implements OnClickListener{

Button add;
TextView display;
Spinner spinner3;
Integer[] money = new Integer[] {1, 2, 5, 10};  

protected void onCreate(Bundle savedInstanceState) {                
    super.onCreate(savedInstanceState);
    setContentView(R.layout.balance_layout);
    TextView tv = (TextView) findViewById(R.id.firstn);
    UDbHelper db = new UDbHelper(this);
    db.open();
    String data = db.getData();
    //db.addUser();
    db.close();
    tv.setText(data);

    ArrayAdapter<Integer> adapter3 = new ArrayAdapter<Integer>(Balance.this,   
                                     android.R.layout.simple_spinner_item, money);

    spinner3 = (Spinner) findViewById (R.id.moneytoadd);
    spinner3.setAdapter(adapter3);

    add = (Button) findViewById(R.id.topup);
    add.setOnClickListener(this);
    //add = (Button) findViewById(R.id.topup);      
}

public void onClick(View arg0)
{
    switch (arg0.getId()){
    case R.id.topup:

        boolean work = true;
        try{
        String money = spinner3.getContext().toString();

        UDbHelper ud = new UDbHelper(this);
        ud.open();
        ud.upDateUser(money);
        ud.close();

    }catch (Exception e){
        work = false;
        String error = e.toString();
        Dialog d = new Dialog(this);
        d.setTitle("Unable To TopUp!");
        TextView dg = new TextView(this);
        dg.setText(error);
        d.setContentView(dg);
        d.show();
}finally{
    if(work){
        Dialog d = new Dialog(this);
        d.setTitle("You Have ToppedUp!");
        TextView dg = new TextView(this);
        dg.setText("TopUp Successful");
        d.setContentView(dg);
        d.show();
            }
        }   
        break;
}
}

public void updateActivity(View view){
    Intent book = new Intent(Balance.this, BookTicket.class);
    startActivity(book);
}

public void addBalance(View view){
    Intent addB = new Intent(Balance.this, Balance.class);
    startActivity(addB);
}

public void doUpdate(View view){
    Intent upd = new Intent(Balance.this, UpdateTicket.class);
    startActivity(upd);
}

}

1 个答案:

答案 0 :(得分:0)

首先,您应该有一个ID,可以让您找到您感兴趣的用户。这样做可以选择获取存储在数据库中的当前值。将值解析为整数并添加&#34; new&#34;钱。最后,更新数据库中的值。

public void upDateUser(String ID, String money) {
        String query = "Select money from TABLE_NAME where ID = " + ID;
        SQLiteDatabase db = this.getWriteableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        int oldMoney = 0;
        if (cursor.moveToFirst()) {         
            oldMoney = Integer.parseInt(cursor.getString(0)); //Cause we get only from money column
        }
        ContentValues cvUpdate = new ContentValues();
        cvUpdate.put(KEY_CREDITS, oldMoney  + money);
        String filter = "UID" + "=" + ID;
        db.update(DATABASE_TABLE, cvUpdate, filter, null);
    }

当然,您必须检查游标是否只返回一行并进行其他检查。