Android 从ListView中删除SQLite数据
我无法从Android 从ListView中删除SQLite数据,android,sqlite,listview,Android,Sqlite,Listview,我无法从列表视图中删除数据。我是第一次使用SQLite,但我无法在这里检测到错误。我查看了其他帖子,但他们在谈论查询的格式。我不认为这是本案的问题,或者是吗 LogCat: 07-31 14:33:20.268: E/SQLiteLog(16651): (1) no such column: aasdfghn 07-31 14:33:20.283: E/AndroidRuntime(16651): FATAL EXCEPTION: main 07-31 14:33:20.283: E/Andro
列表视图
中删除数据。我是第一次使用SQLite,但我无法在这里检测到错误。我查看了其他帖子,但他们在谈论查询的格式。我不认为这是本案的问题,或者是吗
LogCat:
07-31 14:33:20.268: E/SQLiteLog(16651): (1) no such column: aasdfghn
07-31 14:33:20.283: E/AndroidRuntime(16651): FATAL EXCEPTION: main
07-31 14:33:20.283: E/AndroidRuntime(16651): android.database.sqlite.SQLiteException: no such column: aasdfghn (code 1): , while compiling: DELETE FROM Accounts WHERE name = aasdfghn
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:909)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:520)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1547)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.example.dialog.DataBox.deleteItem(DataBox.java:60)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.example.dialog.MainActivity$MyAdapter$1.onClick(MainActivity.java:170)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.view.View.performClick(View.java:4231)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.view.View$PerformClick.run(View.java:17537)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.os.Handler.handleCallback(Handler.java:725)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.os.Handler.dispatchMessage(Handler.java:92)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.os.Looper.loop(Looper.java:158)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.app.ActivityThread.main(ActivityThread.java:5751)
07-31 14:33:20.283: E/AndroidRuntime(16651): at java.lang.reflect.Method.invokeNative(Native Method)
07-31 14:33:20.283: E/AndroidRuntime(16651): at java.lang.reflect.Method.invoke(Method.java:511)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
07-31 14:33:20.283: E/AndroidRuntime(16651): at dalvik.system.NativeStart.main(Native Method)
public class DataBaseHelper extends SQLiteOpenHelper {
public DataBaseHelper(Context cc) {
super(cc, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
Toast.makeText(getApplicationContext(), "Removed", 2000).show();
onCreate(db);
}
}
public void deleteItem(String nn) throws java.sql.SQLException{
db.delete(TABLE_NAME , "name = " + nn , null);
}
holder.n.setText(details.get(position).getName());
// holder.i.setText(details.get(position).getId());
// String idd= holder.i.getText().toString();
final String nn = holder.n.getText().toString();
holder.p.setText(details.get(position).getPassword());
// final String pp = holder.p.getText().toString();
// final int id=Integer.parseInt(idd.toString());
holder.delBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
BOX.open();
try {
BOX.deleteItem(nn);
} catch (SQLException e) {
e.printStackTrace();
}
BOX.close();
}
});
main活动:
07-31 14:33:20.268: E/SQLiteLog(16651): (1) no such column: aasdfghn
07-31 14:33:20.283: E/AndroidRuntime(16651): FATAL EXCEPTION: main
07-31 14:33:20.283: E/AndroidRuntime(16651): android.database.sqlite.SQLiteException: no such column: aasdfghn (code 1): , while compiling: DELETE FROM Accounts WHERE name = aasdfghn
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:909)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:520)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1547)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.example.dialog.DataBox.deleteItem(DataBox.java:60)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.example.dialog.MainActivity$MyAdapter$1.onClick(MainActivity.java:170)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.view.View.performClick(View.java:4231)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.view.View$PerformClick.run(View.java:17537)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.os.Handler.handleCallback(Handler.java:725)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.os.Handler.dispatchMessage(Handler.java:92)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.os.Looper.loop(Looper.java:158)
07-31 14:33:20.283: E/AndroidRuntime(16651): at android.app.ActivityThread.main(ActivityThread.java:5751)
07-31 14:33:20.283: E/AndroidRuntime(16651): at java.lang.reflect.Method.invokeNative(Native Method)
07-31 14:33:20.283: E/AndroidRuntime(16651): at java.lang.reflect.Method.invoke(Method.java:511)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
07-31 14:33:20.283: E/AndroidRuntime(16651): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
07-31 14:33:20.283: E/AndroidRuntime(16651): at dalvik.system.NativeStart.main(Native Method)
public class DataBaseHelper extends SQLiteOpenHelper {
public DataBaseHelper(Context cc) {
super(cc, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
Toast.makeText(getApplicationContext(), "Removed", 2000).show();
onCreate(db);
}
}
public void deleteItem(String nn) throws java.sql.SQLException{
db.delete(TABLE_NAME , "name = " + nn , null);
}
holder.n.setText(details.get(position).getName());
// holder.i.setText(details.get(position).getId());
// String idd= holder.i.getText().toString();
final String nn = holder.n.getText().toString();
holder.p.setText(details.get(position).getPassword());
// final String pp = holder.p.getText().toString();
// final int id=Integer.parseInt(idd.toString());
holder.delBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
BOX.open();
try {
BOX.deleteItem(nn);
} catch (SQLException e) {
e.printStackTrace();
}
BOX.close();
}
});
试试这种方法,希望这能帮助你解决问题。
public void deleteItem(String nn) throws java.sql.SQLException{
String whereClause = "name"+"=?";
String[]whereArgs = new String[] {nn};
db.delete(TABLE_NAME, whereClause , whereArgs);
}
holder.delBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
BOX.open();
try {
BOX.deleteItem(nn);
} catch (SQLException e) {
e.printStackTrace();
}
BOX.close();
notifyDataSetChanged();
}
});
答案在您收到的异常的第一行:
(1) no such column: aasdfghn
...
no such column: aasdfghn (code 1): , while compiling: DELETE FROM Accounts WHERE name = aasdfghn
SQLite将名称“aasdfghn”作为列名。错误来自框。deleteItem()
方法:
public void deleteItem(String nn) throws java.sql.SQLException {
db.delete(TABLE_NAME , "name = " + nn , null); // quotes are missing around the name.
// Should be: db.delete(TABLE_NAME, "name='" + nn + "'" ,null);
}
尝试db.delete(表名,“NAME=”+nn+“”,null);单引号是必需的。检查db.delete()方法返回的值好的,我知道了。成功了。谢谢!:)不客气。类似的事情昨天发生在我身上:)我想这是在处理SQLite时发生的P