2014-04-07 2 views
0

사용자가 현재 크레딧을 업데이트하려고하는데 값을 바꾸지 않고 방금 선택한 금액을 추가하여 사용자의 현재 크레딧에 추가하면됩니까? 고맙습니다.SQLite에서 특정 행을 업데이트하는 방법은 무엇입니까?

내 데이터베이스 코드? actoin을 수행해야

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

클래스 : 모든

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

}

답변

0

먼저 당신이 관심있는 사용자를 찾을 수있게된다 ID가 있어야합니다. 그것은 데이터베이스에 저장된 현재 값을 얻기 위해 select를 수행합니다. 정수 값을 구문 분석하고 "새"돈을 추가하십시오. 마지막으로 데이터베이스의 값을 업데이트하십시오.

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

물론 커서가 정확히 한 행을 반환하는지 확인하고 다른 검사를해야합니다.

+0

감사합니다. 또한 데이터베이스에는 한 명의 사용자 만 있습니다. – user3408604

+0

@ user3408604 사용자가 한 명이라면 데이터베이스 작업 대신 SharedPreferences를 사용하는 것이 좋습니다. 데이터베이스는 여러 사용자/행을 보유하고 있습니다. 프로그래머와 응용 프로그램 모두 하나의 사용자에 대해서만 데이터베이스를 유지 관리하는 것은 너무 많은 작업입니다. 디자인에서 고려하십시오. – markubik

관련 문제