Java 如何更新条目?SQlite/Android/ToDo应用程序
通过以下教程学习如何在android中编程,但我也尝试更新数据库中的条目,尽管不完全是如何更新的。需要帮忙吗Java 如何更新条目?SQlite/Android/ToDo应用程序,java,android,database,sqlite,Java,Android,Database,Sqlite,通过以下教程学习如何在android中编程,但我也尝试更新数据库中的条目,尽管不完全是如何更新的。需要帮忙吗 package dev.edmt.todolist; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.dat
package dev.edmt.todolist;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
/**
* Created by reale on 06/10/2016.
*/
public class DbHelper extends SQLiteOpenHelper {
private static final String DB_NAME="EDMTDev";
private static final int DB_VER = 1;
public static final String DB_TABLE="Task";
public static final String DB_COLUMN = "TaskName";
public DbHelper(Context context) {
super(context, DB_NAME, null, DB_VER);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);",DB_TABLE,DB_COLUMN);
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = String.format("DELETE TABLE IF EXISTS %s",DB_TABLE);
db.execSQL(query);
onCreate(db);
}
public void insertNewTask(String task){
SQLiteDatabase db= this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_COLUMN,task);
db.insertWithOnConflict(DB_TABLE,null,values,SQLiteDatabase.CONFLICT_REPLACE);
db.close();
}
public void editTask(String task){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_COLUMN,task);
db.update(DB_TABLE,values,DB_COLUMN + " = " + task,null) > 0;
db.close();
}
public void deleteTask(String task){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DB_TABLE,DB_COLUMN + " = ?",new String[]{task});
db.close();
}
public ArrayList<String> getTaskList(){
ArrayList<String> taskList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(DB_TABLE,new String[]{DB_COLUMN},null,null,null,null,null);
while(cursor.moveToNext()){
int index = cursor.getColumnIndex(DB_COLUMN);
taskList.add(cursor.getString(index));
}
cursor.close();
db.close();
return taskList;
}
}
db.update
方法将根据您给定的参数创建SQL语句并执行它。您可以查看db.update()
方法来更好地理解
更具体地说,这一部分,不能说我很理解
工作方式:
public void editTask(String task){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_COLUMN,task);
db.update(DB_TABLE,values,DB_COLUMN + " = " + task,null) > 0;
db.close();
}
它可能会工作,就像在notfail中一样,但正如下面解释的,它可能没有任何用处。
SQLiteDatabaseupdate
方法是发出SQL以执行更新的方便方法。它写入/创建基础SQl,执行它,并返回结果(更新的行数)
以代码为例,要在不使用update
方法的情况下执行类似操作,可以创建SQL:-
UPDATE Task SET TaskName = 'your_value' WHERE Task = 'your_value'
- 请注意,正如您所说的那样,这实际上是无用的(假设传递给editTask方法的值是task001)更新在TaskName列中具有值task001的任务行,以将其从task001更改为task001
- 注意
方法使用update
so:-update或IGNORE…
- 当发生适用的约束冲突时,忽略解析算法将跳过包含该约束的一行 并继续处理SQL的后续行 好像没出什么差错似的陈述。前和后的其他行 将插入或更新包含约束冲突的行 正常地忽略冲突解决时不返回任何错误 算法被使用李>
UPDATE Task SET TaskName = 'your_new_value' WHERE Task = 'your_original_value'
public void editTask(String original_task, String new_task){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_COLUMN,new_task);
String[] whereargs = new String[]{original_task};
db.update(DB_TABLE,values,DB_COLUMN + "=?",whereargs) > 0;
db.close();
}
然后,您的editTask
方法可以是:-
public void editTask(String original_task, String new_task){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_COLUMN,new_task);
db.update(DB_TABLE,values,DB_COLUMN + " = '" + original_task + "'" ,null) > 0;
db.close();
}
- e、 g.使用编辑任务(“task001”、“task002”)代码>
- 注意原值任务是如何用单引号括起来的
UPDATE Task SET TaskName = 'your_new_value' WHERE Task = 'your_original_value'
public void editTask(String original_task, String new_task){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_COLUMN,new_task);
String[] whereargs = new String[]{original_task};
db.update(DB_TABLE,values,DB_COLUMN + "=?",whereargs) > 0;
db.close();
}
- 每个?编码在WHERE子句(第3个参数)中,由WHERERERGS(第4个参数)中的相应参数以1比1的方式替换
附加的 除了创建SQL外,
update
方法还使用适当的方法调用SQL,例如,它为您执行与db.execSQL(您的SQL)
等效的操作
此外,在
update
的情况下,它执行以下等效操作:-
Cursor csr = db.rawQuery("SELECT total_changes()",null);
int total_changes = 0;
if(csr.moveToFirst()) {
total_changes = csr.getInt(0);
}
return total_changes;
因此返回更新的行数