从SQLite DataBase中删除一行不起作用

时间:2013-09-11 12:43:45

标签: android sqlite delete-row

我在列表视图中显示数据库中的数据,当用户在一行中执行longclick然后在Dialog中选择“yes”时,我想删除一个条目。我有所有的代码,它编译但它没有删除任何东西。有什么建议吗?感谢

这是listview的代码:

public class Consult extends FragmentActivity { 
    private ListView list;
    private SQLiteDatabase db;
    private int id = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.consult);

        list = (ListView)findViewById(R.id.list);

        this.getIntent();

        ApeironsSQLiteHelper apeironsdb = new ApeironsSQLiteHelper(this, "DBApeirons.DB", null, 1);

        db = apeironsdb.getWritableDatabase();

        String[] campos = new String[]{"_id", "name", "kind_place", "score"};

        Cursor c = db.query("Apeirons", campos, null, null, null, null, null);

        c.moveToFirst();

        String[] from = new String[]{"name", "kind_place", "score"};

        int [] to = new int[] {R.id.Titulo, R.id.SubTitulo};

        //@SuppressWarnings("deprecation")
        MyListAdapter myadapter = new MyListAdapter (this, 
                R.layout.entrys, c, from, to);

        list.setAdapter(myadapter);

        list.setLongClickable(true);
        list.setOnItemLongClickListener(new OnItemLongClickListener(){
            public boolean onItemLongClick(AdapterView<?> arg0, View v,
                    int index, long arg3) {
                saveID(index);
                //db.delete("Apeirons", "_id=" + String.valueOf(index), null);
                Log.d("ONCLICK", String.valueOf(index));
                Log.d("ONCLICK", String.valueOf(id));
                callDialog();
                return false;
            }
        });

    }
    public void callDialog(){
        Log.d("DIALOG", String.valueOf(id));
        FragmentManager fragmentmanager = getSupportFragmentManager();
        SimpleDialog dialog = new SimpleDialog();
        dialog.saveIndex(id);
        //SimpleDialog.newInstance(id);
        dialog.show(fragmentmanager, "tag");
        Log.d("erase", "salgo del callDialog");
    }
    public void saveID(int ID){
        id = ID;
    }

这就是Dialog的代码:

public class SimpleDialog extends DialogFragment {

    private SQLiteDatabase dbs;
    int ID;
    @Override
    public Dialog onCreateDialog (Bundle savedInstanceState){

        //ID = getArguments().getInt("id");

        ApeironsSQLiteHelper apeironsdbs = new ApeironsSQLiteHelper(getActivity(), 
                "DBApeirons.DB", null, 1);
        dbs = apeironsdbs.getWritableDatabase();

        AlertDialog.Builder builder = 
                new AlertDialog.Builder(getActivity());


        builder.setMessage(R.string.EraseDialogMessage);
        builder.setTitle(R.string.app_name);
        builder.setPositiveButton(R.string.EraseDialogPButton, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String args = String.valueOf(ID);
                Log.d("Yes BUTTON", args);
                /*String sql = "DELETE FROM Apeirons WHERE _id=" + args;
                dbs.execSQL(sql);*/
                //int prueba = dbs.delete("Apeirons", " _id = ?" + args, null);
                int prueba = dbs.delete("Apeirons", "_id = ?", new String[] { "" + args });
                Log.d("RETORNO DELETE", String.valueOf(prueba));
            }
        });

        builder.setNegativeButton(R.string.EraseDialogNButton, new DialogInterface.OnClickListener() {  
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();

            }
        });
        return builder.create();
    }

    public void saveIndex(int index){
        ID = index;
    }


}
我修好了!!!问题是我使用的是listview的id,它在数据库中是不一样的。现在我首先恢复数据库的_id并且完美无缺。谢谢你的所有答案。下面恢复数据库_id的代码(可能对某人有用):

list.setLongClickable(true);
        list.setOnItemLongClickListener(new OnItemLongClickListener(){
            public boolean onItemLongClick(AdapterView<?> arg0, View v,
                    int index, long arg3) {
                c.moveToPosition(index);
                int id = c.getInt(c.getColumnIndex("_id"));
                saveID(id);
                Log.d("ONCLICK", String.valueOf(index));
                Log.d("ONCLICK", String.valueOf(id));
                callDialog();
                return false;
            }
        });

2 个答案:

答案 0 :(得分:2)

你可以尝试

private SQLiteDatabase dbs;
String args = String.valueOf(ID);

删除查询

方法1:

dbs = apeironsdbs.getWritableDatabase();
String deleteQuery = "DELETE FROM Apeirons where _id='"+ args +"'";       
dbs .execSQL(deleteQuery);

或者您可以使用

方法2:

ApeironsSQLiteHelper apeironsdb = new ApeironsSQLiteHelper(this, "DBApeirons.DB", null, 1);    
apeironsdb .delete(Apeirons, _id+"="+ID, null);   // ID is int value

答案 1 :(得分:0)

尝试更改此行:

int prueba = dbs.delete("Apeirons", " _id = ?" + args, null);

进入

int prueba = dbs.delete("Apeirons", " _id = \"" + args + "\"", null);