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