使用列字段名称删除行 - SQlite (SQLiteOpenHelper Android)
delete a row using column field name - SQlite (SQLiteOpenHelper Android)
我需要在数据库 (SQLite) 中删除一行
我正在尝试使用文件名删除一行。文件是数据库列中的一个字段。
public void deleteRow (String file){
SQLiteDatabase db = this.getWritableDatabase();
db.delete("checkList", "DELETE FROM checkList Where file = "+file, null);
}
我得到的是:
Process: com.example.operacioneschecklist, PID: 29351
android.database.sqlite.SQLiteException: near "DELETE": syntax error (code 1 SQLITE_ERROR[1]): , while compiling: DELETE FROM checkList WHERE DELETE FROM checkList Where file = SE 062 Merlo20:05:23:12.txt
这是我实现的 class 代码:
class MyDB extends SQLiteOpenHelper {
private static final int VERSION_BASEDATOS = 1;
private static final String NAME = "checkList.db";
private static final String TABLA_CHECK_LIST = "CREATE TABLE IF NOT EXISTS checkList" +
"(id INTEGER PRIMARY KEY AUTOINCREMENT, file TEXT, se TEXT, date TEXT, aux TEXT)";
public MyDB(Context context) {
super(context, NAME, null, VERSION_BASEDATOS);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLA_CHECK_LIST);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS checkList");
onCreate(db);
}
public boolean deleteDB(Context context) {
return context.deleteDatabase(NAME);
}
public void insert(String file, String se, String date, String aux) {
SQLiteDatabase db = getWritableDatabase();
if (db != null) {
ContentValues valores = new ContentValues();
valores.put("file", file);
valores.put("se", se);
valores.put("date", date);
valores.put("aux", aux);
db.insert("checkList", null, valores);
db.close();
}
}
public List<String> loadHandler() {
List<String> list = new ArrayList<String>();
String query = "Select*FROM checkList";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
while (cursor.moveToNext()) {
int result_0 = cursor.getInt(0);
String result_1 = cursor.getString(1);
String result_2 = cursor.getString(2);
String result_3 = cursor.getString(3);
String result_4 = cursor.getString(4);
list.add(result_1 + "%:&" + result_2 + "%:&" + result_3 + "%:&" + result_4);
}
cursor.close();
db.close();
return list;
}
public int getRowCount() {
String query = "Select*FROM checkList";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
return cursor.getCount();
}
public void deleteFirstRow() {
SQLiteDatabase db = this.getWritableDatabase();
String where = "id < (select id from checkList order by id limit 15, 1)";
db.delete("checkList", where, null);
}
public void orderIt() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("VACUUM");
}
public String getLastHash() {
SQLiteDatabase db = this.getWritableDatabase();
String query = "Select*FROM checkList";
Cursor cursor = db.rawQuery(query, null);
cursor.moveToLast();
return cursor.getString(1);
}
public void deleteRow(String file) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete("checkList", "DELETE FROM checkList Where file = " + file, null);
}
}
问题是,在 delete()
的第二个参数中,您使用了完整的 sql 语句,这是不需要的,您将变量 file
连接到 sql 语句的字符串而不用单引号引起来。
但即使你这样做了,这也不是安全和推荐的方式。
在方法 delete()
的 3d 参数中传递参数 file
并在 sql 语句中使用 ?
占位符,它将被 file
的值替换, 正确引用, 何时解析语句:
db.delete("checkList", "file = ?", new String[] {file});
delete()
的第二个参数是没有关键字 WHERE
的 WHERE
子句。
我需要在数据库 (SQLite) 中删除一行
我正在尝试使用文件名删除一行。文件是数据库列中的一个字段。
public void deleteRow (String file){
SQLiteDatabase db = this.getWritableDatabase();
db.delete("checkList", "DELETE FROM checkList Where file = "+file, null);
}
我得到的是:
Process: com.example.operacioneschecklist, PID: 29351 android.database.sqlite.SQLiteException: near "DELETE": syntax error (code 1 SQLITE_ERROR[1]): , while compiling: DELETE FROM checkList WHERE DELETE FROM checkList Where file = SE 062 Merlo20:05:23:12.txt
这是我实现的 class 代码:
class MyDB extends SQLiteOpenHelper {
private static final int VERSION_BASEDATOS = 1;
private static final String NAME = "checkList.db";
private static final String TABLA_CHECK_LIST = "CREATE TABLE IF NOT EXISTS checkList" +
"(id INTEGER PRIMARY KEY AUTOINCREMENT, file TEXT, se TEXT, date TEXT, aux TEXT)";
public MyDB(Context context) {
super(context, NAME, null, VERSION_BASEDATOS);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLA_CHECK_LIST);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS checkList");
onCreate(db);
}
public boolean deleteDB(Context context) {
return context.deleteDatabase(NAME);
}
public void insert(String file, String se, String date, String aux) {
SQLiteDatabase db = getWritableDatabase();
if (db != null) {
ContentValues valores = new ContentValues();
valores.put("file", file);
valores.put("se", se);
valores.put("date", date);
valores.put("aux", aux);
db.insert("checkList", null, valores);
db.close();
}
}
public List<String> loadHandler() {
List<String> list = new ArrayList<String>();
String query = "Select*FROM checkList";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
while (cursor.moveToNext()) {
int result_0 = cursor.getInt(0);
String result_1 = cursor.getString(1);
String result_2 = cursor.getString(2);
String result_3 = cursor.getString(3);
String result_4 = cursor.getString(4);
list.add(result_1 + "%:&" + result_2 + "%:&" + result_3 + "%:&" + result_4);
}
cursor.close();
db.close();
return list;
}
public int getRowCount() {
String query = "Select*FROM checkList";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
return cursor.getCount();
}
public void deleteFirstRow() {
SQLiteDatabase db = this.getWritableDatabase();
String where = "id < (select id from checkList order by id limit 15, 1)";
db.delete("checkList", where, null);
}
public void orderIt() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("VACUUM");
}
public String getLastHash() {
SQLiteDatabase db = this.getWritableDatabase();
String query = "Select*FROM checkList";
Cursor cursor = db.rawQuery(query, null);
cursor.moveToLast();
return cursor.getString(1);
}
public void deleteRow(String file) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete("checkList", "DELETE FROM checkList Where file = " + file, null);
}
}
问题是,在 delete()
的第二个参数中,您使用了完整的 sql 语句,这是不需要的,您将变量 file
连接到 sql 语句的字符串而不用单引号引起来。
但即使你这样做了,这也不是安全和推荐的方式。
在方法 delete()
的 3d 参数中传递参数 file
并在 sql 语句中使用 ?
占位符,它将被 file
的值替换, 正确引用, 何时解析语句:
db.delete("checkList", "file = ?", new String[] {file});
delete()
的第二个参数是没有关键字 WHERE
的 WHERE
子句。