一个在SQLite数据库Android的增量领域 [英] Increment the field by one in sqlite database android
本文介绍了一个在SQLite数据库Android的增量领域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有它重新presents店为我的比赛一个表的数据库。问题是,当我使用的方法来购买它并没有一个递增的价值,但只是将其设置为零。那么,如何可以通过提高各一个,它被称为特定ID时间递增ItemNumberOfPurchases的值的方法?这是我的code这一点。
公共类MonsterTapDatabase扩展SQLiteOpenHelper {
静态最后弦乐DBNAME =MonsterTapDb;
静态最终诠释版本= 1;
静态最后弦乐tTableName =商店;
静态最后弦乐fItemID =项目ID;
静态最后弦乐fItemName =了itemname;
静态最后弦乐fItemNumberOfPurchases =NumberOfPurchases;
静态最后弦乐fItemIsLocked =IsItemLocked;
公共MonsterTapDatabase(上下文的背景下){
超(背景下,数据库名,空,版本);
}
@覆盖
公共无效的onCreate(SQLiteDatabase sqLiteDatabase){
sqLiteDatabase.execSQL(CREATE TABLE IF NOT EXISTS+ tTableName +(+
fItemID +INTEGER PRIMARY KEY,+
fItemName +TEXT+
fItemNumberOfPurchases +INT+
fItemIsLocked +TEXT+
));
ContentValues CV =新ContentValues();
cv.put(fItemID,1);
cv.put(fItemName,住);
cv.put(fItemNumberOfPurchases,0);
cv.put(fItemIsLocked,真);
sqLiteDatabase.insert(tTableName,空,CV);
cv.put(fItemID,2);
cv.put(fItemNameHardmode);
cv.put(fItemNumberOfPurchases,0);
cv.put(fItemIsLocked,真);
sqLiteDatabase.insert(tTableName,空,CV);
cv.put(fItemID,3);
cv.put(fItemName,反向);
cv.put(fItemNumberOfPurchases,0);
cv.put(fItemIsLocked,真);
sqLiteDatabase.insert(tTableName,空,CV);
cv.put(fItemID,4);
cv.put(fItemName,反转Hardmode);
cv.put(fItemNumberOfPurchases,0);
cv.put(fItemIsLocked,真);
sqLiteDatabase.insert(tTableName,空,CV);
}
@覆盖
公共无效onUpgrade(SQLiteDatabase sqLiteDatabase,诠释我,诠释I1){
sqLiteDatabase.execSQL(DROP TABLE IF EXISTS+ tTableName);
的onCreate(sqLiteDatabase);
}
公共无效报价(INT ID){
SQLiteDatabase MYDB = this.getWritableDatabase();
myDB.execSQL(UPDATE+ tTableName +
SET+ fItemNumberOfPurchases += IFNULL(+ fItemNumberOfPurchases +,0)1+
WHERE+ fItemID +=+ ID);
myDB.close();
}
公共无效lockItem(INT ID){
SQLiteDatabase MYDB = this.getWritableDatabase();
ContentValues CV =新ContentValues();
cv.put(fItemIsLocked,假);
myDB.update(tTableName,CV,fItemID +=?,新的String [] {将String.valueOf(ID)});
}
公共字符串isPurchased(INT ID){
SQLiteDatabase MYDB = this.getReadableDatabase();
的String [] MYSEARCH =新的String [] {将String.valueOf(ID)};
光标myCursor = myDB.rawQuery(选择+ fItemIsLocked +FROM+ tTableName +WHERE+ fItemID +=?,MYSEARCH);
myCursor.moveToFirst();
INT指数= myCursor.getColumnIndex(fItemID);
字符串myAnswer = myCursor.getString(指数);
myCursor.close();
返回myAnswer;
}
公众诠释numberOfLives(){
INT ID = 1;
SQLiteDatabase MYDB = this.getReadableDatabase();
的String [] MYSEARCH =新的String [] {将String.valueOf(ID)};
光标myCursor = myDB.rawQuery(选择+ fItemNumberOfPurchases +FROM+ tTableName +WHERE+ fItemID +=?,MYSEARCH);
myCursor.moveToFirst();
INT指数= myCursor.getColumnIndex(fItemNumberOfPurchases);
myCursor.close();
返回指数;
}
}
解决方案
- 您正在使用
fItemNumberOfPurchases
而不是fItemID
; - 为什么你对子级比较有不平等ID?
- 如果
fItemNumberOfPurchases
是NULL
,运算与数字总是返回NULL
,这可能与 IFNULL 处理。
修正:
SQLiteDatabase MYDB = this.getWritableDatabase();
myDB.execSQL(UPDATE+ tTableName +
SET+ fItemNumberOfPurchases += IFNULL(+ fItemNumberOfPurchases +,0)1+
WHERE+ fItemID +=+ ID);
myDB.close();
I have a database with a table which represents Shop for my game. The problem is, that when I use the method to purchase it doesn't increment the value by one but just sets it to zero. So how can I improve the method to increment the value of ItemNumberOfPurchases by one each time it's called for specific ID ? Here is my code for this.
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;
}
}
解决方案
- You are using
fItemNumberOfPurchases
instead offItemID
; - Why whould you compare a ID with a inequality?
- If
fItemNumberOfPurchases
isNULL
, arithmetic with numbers will always returnNULL
, which may be handled with IFNULL.
Corrected:
SQLiteDatabase myDB = this.getWritableDatabase();
myDB.execSQL("UPDATE " + tTableName+
" SET "+fItemNumberOfPurchases+"=IFNULL("+fItemNumberOfPurchases+",0)+1"+
" WHERE "+fItemID+"="+ID);
myDB.close();
这篇关于一个在SQLite数据库Android的增量领域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文