1

我有一个数据库,我在其中存储已发送消息的数量。但是,当我发送消息时,计数器不会增加。

这是数据库类(usersdata):

import static android.provider.BaseColumns._ID;
import static com.app.Constants.TABLE_NAME;
import static com.app.Constants.PHONE_NUMBER;
import static com.app.Constants.SMS_SENT;
import static com.app.Constants.SMS_RECEIVED;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class UsersData extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "rpgsms.db";
private static final int DATABASE_VERSION = 1;

public UsersData (Context ctx) {
    super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + 
            PHONE_NUMBER + " TEXT PRIMARY KEY, " +
            SMS_SENT + " INT, " +
            SMS_RECEIVED + " INT);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

}

在另一个类中,我想更新该SMS_SENT字段,我这样做是这样的:

usersData = new UsersData(this);
SQLiteDatabase db = usersData.getWritableDatabase();
db.rawQuery("UPDATE "+ TABLE_NAME + " SET "+ SMS_SENT + " = " + SMS_SENT + "+1", null);

但是,这不会更新相应的字段。我究竟做错了什么?

4

6 回答 6

2

似乎其他人也有同样的问题。它是使用函数解决的,execSQL而不是rawQuery更新字段。

你可以在这里阅读:增加 android/sqlite 数据库中记录的值

于 2013-01-13T18:11:49.030 回答
2

update sql 语句缺少 where 子句,因此会更新所有行。尝试这个:

db.rawQuery("UPDATE "+ TABLE_NAME + " SET "+ SMS_SENT
    + " = " + SMS_SENT + "+1 WHERE " + PHONE_NUMBER
    + " = '" + phoneNumber +"'", null);
于 2013-01-17T01:38:58.550 回答
2

ID遵循良好的数据库设计,拥有一个具有整数数据类型的字段并让该值自动递增以创建唯一记录几乎总是一个好主意。对于您的特定问题,只需添加一ID列并将其设置为INTEGER数据类型即可轻松解决,而不是INT像使用高性能数据库(如 Postgresql、MySQL 等)那样。尝试将您的架构更改为这样的东西,它应该可以解决问题:

    db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
        ID + " INTEGER PRIMARY KEY, " + 
        PHONE_NUMBER + " TEXT, " +
        SMS_SENT + " INTEGER, " +
        SMS_RECEIVED + " INTEGER);"
    );

您现在所要做的只是传递 , 的值,PHONE_NUMBER并且您的计数器(字段)应该开始相应地增加。有关更多信息,您可以查看这篇文章SMS_SENTSMS_RECEIVEDID

于 2013-01-13T21:07:11.967 回答
2

我通过以下方式解决了它:

ContentValues args = new ContentValues();
args.put(SMS_SENT, sent+1);
db.update(TABLE_NAME, args, ID, new String[] {"id_value"});
于 2013-01-13T22:58:50.713 回答
1

尝试这个,

在创建表时使用INTEGER而不是INT. 它应该工作。

db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + 
        PHONE_NUMBER + " TEXT PRIMARY KEY, " +
        SMS_SENT + " INTEGER, " +
        SMS_RECEIVED + " INTEGER);");
于 2013-01-08T16:09:26.863 回答
0

将您的 UPDATE 查询更改为:

int newcount=SMS_SENT+1;
db.rawQuery("UPDATE "+ TABLE_NAME + " SET "+ 
                       SMS_SENT + " = " + newcount + "", null);
                        ^^^^^

并确保SMS_SENT字符串列名不是数字

于 2013-01-08T16:19:51.420 回答