gpt4 book ai didi

android - SQLiteDatabase 更新不起作用?

转载 作者:IT王子 更新时间:2023-10-29 06:26:16 25 4
gpt4 key购买 nike

我试图让 db.update 用新值更新我的数据库中的一行,但它似乎没有保存。我查看了语法,但似乎无法保存数据。插入功能有效但不更新。任何帮助,将不胜感激。下面是我的数据类,它使用 DbHelper 对象。

  public class Data {
static final String TAG = "Data";

public static final String DB_NAME = "data.db";
public static final String TABLE_NAME = "tasks";
public static final String C_ID = "_id";
public static final String C_TASK = "taskname";
public static final String C_DUE_DATE = "due_date";
public static final String C_PRIORITY = "priority";
public static final int DB_VERSION = 1;

Context context;
DbHelper dbHelper;
SQLiteDatabase db;

public Data(Context context) {
this.context = context;
dbHelper = new DbHelper();
}

public void insert(ToDoItem task) {
db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(C_TASK, task.getTask());
values.put(C_PRIORITY, task.getPriority());

db.insert(TABLE_NAME, null, values);
}
public void update(int id, ToDoItem task) {
ContentValues values = new ContentValues();
values.put(C_ID, id);
values.put(C_TASK, task.getTask());
values.put(C_PRIORITY, task.getPriority());

String[] whereArgs = {String.valueOf(id)};

db.update(TABLE_NAME, values, C_ID +" =?", whereArgs);
System.out.println(db.update(TABLE_NAME, values, C_ID +" =?", whereArgs));

Log.d(TAG, "updating task " + db.toString() +" "+ id + " to priority " + task.getPriority());
}

public void delete(int id){
db.delete(TABLE_NAME, C_ID+"="+id, null);
}

public Cursor queueAll(){
db = dbHelper.getWritableDatabase();

String[] columns = new String[]{C_ID, C_TASK, C_DUE_DATE, C_PRIORITY};

Cursor cursor = db.query(TABLE_NAME, columns,
null, null, null, null, null);
return cursor;
}

class DbHelper extends SQLiteOpenHelper {

public DbHelper() {
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = String.format("create table %s" +
"(%s int primary key, %s text, %s text, %s int)",
TABLE_NAME, C_ID, C_TASK, C_DUE_DATE, C_PRIORITY);

Log.d(TAG, "onCreate with SQL:"+sql);

db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop if exists " + TABLE_NAME);
onCreate(db);
}
}

}

这是我尝试在单击项目时更新优先级的 ToDoItem 对象类

     public class ToDoItem {
private String task;
private String dueDate;
private int priority;

public ToDoItem(String task) {
this.task = task;
this.priority = 1;
}

public ToDoItem(String task, String dueDate) {
this.task = task;
this.dueDate = dueDate;
this.priority = 1;
}

public ToDoItem(String task, int priority) {
this.task = task;
if(priority <=3 && priority > 0) {
this.priority = priority;
} else
this.priority = 1;
}

public ToDoItem(String task, String dueDate, int priority) {
this.task = task;
this.dueDate = dueDate;
if(priority <=3 && priority > 0) {
this.priority = priority;
} else
this.priority = 1;
}

public String getTask() {
return task;
}

public void setTask(String task) {
this.task = task;
}

public String getDueDate() {
return dueDate;
}

public void setDueDate(String dueDate) {
this.dueDate = dueDate;
}

public int getPriority() {
return priority;
}

public void setPriority(int priority) {
if(priority <=3 && priority > 0) {
this.priority = priority;
} else
this.priority = 1;
}
}

最后是我的 onListItemClickListener,它使用 ToDoItems 的 ArrayList,更改优先级并从我的数据类调用更新方法。但是,我尝试更新的行的值保持不变。我使用 Log.d 检查是否传递了正确的值,它们确实传递了。由于某种原因,更改没有发生。任何帮助将不胜感激。

        todoList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
long arg3) {

if(soundEnabled) {
playSound();
}

// Change the priority of the item inside the arrayList todoItems
todoItems.get(arg2).setPriority(todoItems.get(arg2).getPriority() + 1);
String name = todoItems.get(arg2).getTask();
int priority = todoItems.get(arg2).getPriority();
final ToDoItem task = new ToDoItem(name, priority);

// Get the position of the task in the database
int id = arg2 + 1;
data.update(id, task);


});

最佳答案

你会打印 db.update(TABLE_NAME, values, C_ID +"="+id, null) 函数返回值吗?

如果返回值为0,则DB中没有这样的“id”行记录。

关于android - SQLiteDatabase 更新不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14532859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com