如何从SQLite数据库中删除特定的行

问题描述:

我已经创建了一个列表视图。点击按钮时,数据将添加到列表中,并存储在SQLite数据库中。我还在列表的右侧添加了图像,点击某个特定的行数据被删除,但我也想从SQLite中删除数据。我怎么能这样做?如何从SQLite数据库中删除特定的行

Main Activity.Java 

public class MainActivity extends Activity { 

     EditText editText; 
     Button Button,Button1; 
     ListView listView; 
     ArrayList<String> listItems; 
     BaseAdapter adapter; 
     private DataBaseHandler mHelper; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      mHelper=new DataBaseHandler(this); 
      editText = (EditText) findViewById(R.id.editText); 

      Button = (Button) findViewById(R.id.Button); 
      listView = (ListView) findViewById(R.id.listview); 

      listItems = new ArrayList<String>(); 

      adapter =new BaseAdapter() 
      { 

       @Override 
       public View getView(final int arg0, View arg1, ViewGroup arg2) 
       { 
       LayoutInflater inflater = getLayoutInflater(); 
       arg1 = inflater.inflate(R.layout.custom, null); 
       TextView textview = (TextView)arg1. findViewById(R.id.textView1); 
       textview.setText(listItems.get(arg0)); 
       ImageView image = (ImageView)arg1. findViewById(R.id.imageView1); 

       image.setOnClickListener(new OnClickListener() 
       { 

       @Override 
       public void onClick(View v) 
       { 

       listItems.remove(arg0); 

       listView.setAdapter(adapter); 
       Toast.makeText(MainActivity.this, "Item has been successfully deleted", Toast.LENGTH_LONG) 
       .show(); 

       } 
       }); 

       return arg1; 
       } 

       @Override 
       public long getItemId(int arg0) { 

       return 0; 
       } 

       @Override 
       public Object getItem(int arg0) { 

       return null; 
       } 

       @Override 
       public int getCount() { 
       //code to set the list item size according to array data size 
       return listItems.size(); 
       } 
       }; 

       listView.setAdapter(adapter); 
       Button.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) 
       { 

       listItems= mHelper.addListItem(editText.getText().toString()); 

       adapter.notifyDataSetChanged(); 


       listView.setSelection(listView.getAdapter().getCount()-1); 

       editText.getText().clear(); 
       } 
       }); 

     } 
    } 





DATABASE HANDLER.JAVA 

public class DataBaseHandler extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "MyDatabase.db"; 
    private static final String TABLE_LIST = "MyListItem"; 
    private static final String KEY_ID = "id"; 
    private static final String KEY_ListItem = "listitem"; 

    public static final String KEY_NAME = null; 

    public DataBaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
    String CREATE_LIST_TABLE = "CREATE TABLE " + TABLE_LIST + "(" + KEY_ID 
    + " integer primary key autoincrement," + KEY_ListItem + " TEXT" + ")"; 

    db.execSQL(CREATE_LIST_TABLE); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LIST); 

    onCreate(db); 
    } 
    ArrayList<String> addListItem(String listItem) 
    { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_ListItem, listItem); 
    db.insert(TABLE_LIST, null, values); 

    ArrayList<String> items=new ArrayList<String>(); 
    String selectQuery = "SELECT * FROM " + TABLE_LIST; 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    cursor.moveToFirst(); 


    while (!cursor.isAfterLast()) 
    { 

    items.add(cursor.getString(1)); 
    cursor.moveToNext(); 

    } 

    cursor.close(); 


    db.close(); 

    return items; 
    } 
    Cursor getListItem() 
    { 
    String selectQuery = "SELECT * FROM " + TABLE_LIST; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

     return cursor; 
    } 

} 
+0

@Darkie准确地说,您需要一个SQL **命令**,而不是**查询**。 – 2014-09-29 06:58:56

+0

@ FrankN.Stein是的,我忘了字命令....;) – Umair 2014-09-29 07:48:56

您需要在DataBaseHandler类中创建方法deleteItem。这将这样做,

db.delete(TABLE_LIST , KEY_ID + "=" + yourIdToBeDeleted, null); 

而且使从为您的删除按钮/图像的onClick这种方法的调用:

mHelper.deleteItem(idOfItemToBeDeleted); 

希望它能帮助。

+0

请告诉我如何打电话onclick图像。 – user3905549 2014-09-29 07:19:27

+0

@ user3905549看到编辑后。 – 2014-09-29 07:21:50

要删除单个数据条目(即行)使数据库处理程序的方法:

public void delete(int id) { 

     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE_NAME, KEY_ID + "=?", 
       new String[] { String.valueOf(id) }); // KEY_ID= id of row and third parameter is argument. 
     db.close(); 
    } 

此方法将删除ID被给予单个行。

+0

我使用了这段代码,但列表视图中的行被删除,但不是从数据库中删除。 – user3905549 2014-09-29 07:12:08

+1

在数据库处理程序中使用此方法,并在您的活动中调用它。 Like'databasehendler.delete(id)' – Shvet 2014-09-29 07:20:13