android - 从 ListView 中删除 SQLite 数据

标签 android sqlite listview

我无法从 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/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);
        }

主要 Activity :

    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();

        }
    });

最佳答案

答案在您收到的异常的第一行中:

(1) no such column: aasdfghn
...
no such column: aasdfghn (code 1): , while compiling: DELETE FROM Accounts WHERE name = aasdfghn

名称“aasdfghn”被 SQLite 用作列名。该错误来自 BOX.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);
}

关于android - 从 ListView 中删除 SQLite 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055234/

相关文章:

sql - 为每个 ID 选择每月的最后一条记录

c# - 如何以 c# windows 形式将 Excel 文件数据导入 SQLite 数据库?

android - 如何使用 ListView 填充表格布局

java - ListView项目背景颜色更新

android - 如何在 Android 中实现纸张剥离效果?

java - 通过单击网站按钮打开 android 应用程序?

java - 在屏幕上非线性滑动

c++ - 如何检查我们是否在 SQLite 中的事务中?

android - 在 flutter 形式的 sqlite 数据库的 ListView 中加载 7000 多个项目的内存有效方法是什么

Java : Why sometimes we get new object from method instead creating from constructor?