내 게임을위한 쇼핑을 나타내는 테이블이있는 데이터베이스가 있습니다. 문제는 구매할 때 메서드를 사용할 때 값을 1 씩 증가시키지 않고 0으로 설정한다는 것입니다. 그렇다면 특정 ID가 호출 될 때마다 ItemNumberOfPurchases의 값을 하나씩 늘리는 방법을 어떻게 개선 할 수 있습니까? 여기에 대한 내 코드입니다.sqlite 데이터베이스에서 필드를 1 씩 증가시킵니다. android
public class MonsterTapDatabase extends SQLiteOpenHelper {
static final String dbName = "MonsterTapDb";
static final int version = 1;
static final String tTableName = "Shop";
static final String fItemID = "ItemID";
static final String fItemName = "ItemName";
static final String fItemNumberOfPurchases = "NumberOfPurchases";
static final String fItemIsLocked = "IsItemLocked";
public MonsterTapDatabase(Context context) {
super(context, dbName, null, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "+tTableName+" (" +
fItemID + " INTEGER PRIMARY KEY , " +
fItemName + " TEXT , " +
fItemNumberOfPurchases + " INT, " +
fItemIsLocked + " TEXT" +
")");
ContentValues cv = new ContentValues();
cv.put(fItemID, 1);
cv.put(fItemName, "Lives");
cv.put(fItemNumberOfPurchases, 0);
cv.put(fItemIsLocked, "true");
sqLiteDatabase.insert(tTableName, null, cv);
cv.put(fItemID, 2);
cv.put(fItemName, "Hardmode");
cv.put(fItemNumberOfPurchases, 0);
cv.put(fItemIsLocked, "true");
sqLiteDatabase.insert(tTableName, null, cv);
cv.put(fItemID, 3);
cv.put(fItemName, "Reversed");
cv.put(fItemNumberOfPurchases, 0);
cv.put(fItemIsLocked, "true");
sqLiteDatabase.insert(tTableName, null, cv);
cv.put(fItemID, 4);
cv.put(fItemName, "Reversed Hardmode");
cv.put(fItemNumberOfPurchases, 0);
cv.put(fItemIsLocked, "true");
sqLiteDatabase.insert(tTableName, null, cv);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + tTableName);
onCreate(sqLiteDatabase);
}
public void purchase(int ID){
SQLiteDatabase myDB = this.getWritableDatabase();
myDB.execSQL("UPDATE " + tTableName+
" SET "+fItemNumberOfPurchases+"=IFNULL("+fItemNumberOfPurchases+",0)+1"+
" WHERE "+fItemID+"="+ID);
myDB.close();
}
public void lockItem(int ID){
SQLiteDatabase myDB = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(fItemIsLocked, false);
myDB.update(tTableName, cv, fItemID+"=?", new String []{String.valueOf(ID)});
}
public String isPurchased(int ID){
SQLiteDatabase myDB = this.getReadableDatabase();
String[] mySearch = new String[]{String.valueOf(ID)};
Cursor myCursor = myDB.rawQuery("SELECT "+ fItemIsLocked +" FROM "+ tTableName +" WHERE "+ fItemID +"=?",mySearch);
myCursor.moveToFirst();
int index = myCursor.getColumnIndex(fItemID);
String myAnswer = myCursor.getString(index);
myCursor.close();
return myAnswer;
}
public int numberOfLives(){
int ID = 1;
SQLiteDatabase myDB = this.getReadableDatabase();
String[] mySearch = new String[]{String.valueOf(ID)};
Cursor myCursor = myDB.rawQuery("SELECT "+ fItemNumberOfPurchases +" FROM "+ tTableName +" WHERE "+ fItemID +"=?",mySearch);
myCursor.moveToFirst();
int index = myCursor.getColumnIndex(fItemNumberOfPurchases);
myCursor.close();
return index;
}
}
당신이 테이블에 대한 기본 키를 설정 했습니까? – chain
예, ID는 기본 키입니다. 하지만 ID를 증가시키고 싶지 않지만 fItemNumberOfPurchases – Traabefi
기본 키를 AUTOINCREMENT로 설정할 수있었습니다. – Bram