Sqlite: как мне увеличить значение строки на +1?
У меня есть таблица TOTALCOUNT со столбцом PK _id и целочисленным столбцом "CARDNUM". Я хочу установить значение CARDNUM по умолчанию на ноль. И затем увеличивайте CARDNUM на +1 каждый раз, когда новая строка вставляется в базу данных. Таким образом, при 5 вставках строк будет получено 1,2,3,4,5 для строк с 1 по 5. Когда я помещаю данные в отдельные CardViews в моем RecyclerView, я получаю только значение по умолчанию, равное нулю. Первые пять CardViews должны показывать значение CARDNUM, таким образом 1,2,3,4,5. Что мне здесь не хватает?
Файл DBContract:
...
public static final String TABLE_NAME_TOTALCOUNT = "totalcount";
public static final String COLUMN_NAME_COUNTID = "_id";
public static final String COLUMN_NAME_CARDNUM = "cardnum";
}
}
A second table, not shown is called USERINPUTS.
DBHelper файл:
...
public void onCreate(SQLiteDatabase db) {
// Set up the Column headings for USERINPUTS and TOTALCOUNT Tables.
db.execSQL(SQL_CREATE_ENTRIES);
db.execSQL(SQL_CREATE_CARDNUM);
private static final String SQL_CREATE_CARDNUM =
"CREATE TABLE IF NOT EXISTS "+ DBContract.DBEntry.TABLE_NAME_TOTALCOUNT +
"( "+ DBContract.DBEntry.COLUMN_NAME_COUNTID +
" INTEGER PRIMARY KEY , "+
DBContract.DBEntry.COLUMN_NAME_CARDNUM +
" INTEGER);";
public void insertIntoTableTOTALCOUNT() {
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
String select = "Select * from "+ DBContract.DBEntry.TABLE_NAME_TOTALCOUNT;
Cursor c =db.rawQuery(select, null);
int cardnum=0;
try {
if (c.moveToFirst()) {
cardnum = c.getInt(1);
cardnum++;
}
} finally {
if(c !=null && !c.isClosed()){
c.close();
}
}
ContentValues cv = new ContentValues();
cv.put(DBContract.DBEntry.COLUMN_NAME_CARDNUM,cardnum);
db.insert(DBContract.DBEntry.TABLE_NAME_TOTALCOUNT,null,cv);
db.setTransactionSuccessful();
db.endTransaction();
// Close the database.
if(db.isOpen())
db.close();
}
...
// Two Tables push the data to a RecyclerView list.
public List<UserData> getDataFromDB(){
List<UserData> modelList = new ArrayList<>();
String query = "SELECT *, (SELECT " + DBContract.DBEntry.COLUMN_NAME_CARDNUM +
" from " + DBContract.DBEntry.TABLE_NAME_TOTALCOUNT +") from "
+ DBContract.DBEntry.TABLE_NAME_USERINPUTS +";";
SQLiteDatabase db = this.getReadableDatabase();
db.beginTransaction();
Cursor cursor = db.rawQuery(query, null);
Log.d("TAG", DatabaseUtils.dumpCursorToString(cursor));
try {
if (cursor.moveToFirst()) {
do {
UserData userData = new UserData();
userData.setTodo(cursor.getString(1));
userData.setNote1(cursor.getString(2));
userData.setNote2(cursor.getString(3));
userData.setDuedate(cursor.getString(4));
userData.setDuetime(cursor.getString(5));
userData.setTimestamp(cursor.getLong(6));
userData.setCardnum(cursor.getInt(7));
modelList.add(0, userData);
} while (cursor.moveToNext());
}
} finally {
if(cursor !=null && !cursor.isClosed()){
cursor.close();
}
}
db.setTransactionSuccessful();
db.endTransaction();
return modelList;
}
1 ответ
Вы можете легко сделать это, добавив опцию " AUTOINCREMENT " при создании таблицы, и она будет автоматически увеличена
или, кстати, но при работе с курсором вам не хватает, попробуйте
Cursor c =db.rawQuery(select, null);
int cardnum=0;
c.moveToFirst();
while( c != null )
{
cardnum = c.getInt(1);
cardnum++;
c.moveToNext();
}