2017-08-20 7 views
-4

SQLiteデータベース内の特定の列を削除したいです。db.deleteは指定された行の代わりに最初の行を削除します

私はwhereClauseとして列のIDを渡そうとしましたが、whereClauseに文字列値が必要であるというエラーが表示され続けます。

私は解決策のためにSOを梳きましたが、私の質問に答えるものは見つかりませんでした。私はまた、Google検索を試みて、多くの異なる方法で私の質問を書いたが、役に立たない。ここで

は私のコードはDBHelperがTABLE

をCREATE方法

public int deleteData(int id){ 
    String ID = String.valueOf(id); 
    SQLiteDatabase database = this.getWritableDatabase(); 
    return database.delete(TABLE_NAME, _id + " = ?",new String[]{ID}); 

を削除

削除ボタン

public void toDeleteNote(View view) { 

    DBHelper dbHelper = new DBHelper(this); 
    int deletedRows = dbHelper.deleteData(selectedID); 
    if (deletedRows > 0){ 
     Toast.makeText(getBaseContext(), selectedName + " deleted successfully", Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(getBaseContext(), "Something went wrong!", Toast.LENGTH_LONG).show(); 
    } 
    Intent intent5 = new Intent(EditData.this, MainActivity.class); 
    startActivity(intent5); 

    } 
} 

です

@Override public void onCreate(SQLiteDatabase db) { String createTable = "CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + MAP_NO + " INTEGER, " + LOCATION + " TEXT, " + DATE + " INTEGER, " + NOTATHOMES + " TEXT)"; db.execSQL(createTable); } 

さらに情報が必要な場合は、お気軽にお問い合わせください。

+1

テーブル定義を追加できますか?どの行が削除されているか確認していますか?また、列全体ではなく行全体を削除しています –

+0

こんにちは、@ cricket_007、申し訳ありませんが、私は間違いを修正します。私は行ではなく、列を削除したい。 –

+0

おそらく 'selectedID'にはあなたが思うと思われる値は含まれていません。 – Andreas

答えて

0

私はそれを理解しました。

私がする必要があったのは、リストビューに関連付けられたカーソルを使用してIDとストアをインテントに戻すことでした。ここで

は例です:

public void displayList() { 
     final Cursor cursor = dbHelper.getData(); 
     String from[] = new String[]{DBHelper.LOCATION}; 
     int to[] = new int[]{R.id.ListLayout1}; 
     simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.row_item, cursor, from, to, 0); 


     final ListView listView = (ListView) findViewById(R.id.list); 
     listView.setAdapter(simpleCursorAdapter); 
     while (cursor.moveToNext()) { 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       if(cursor.getCount()>0) { 
        cursor.moveToPosition(i); 
        Intent intent = new Intent(MainActivity.this, EditData.class); 
        intent.putExtra("id", cursor.getInt(cursor.getColumnIndex(DBHelper._id))); 
        startActivity(intent); 

だからそれがあります。 皆様のご協力ありがとうございます!

0

テーブルの行を一意に識別するためにデータベースの_id列に頼るべきではありません。たとえば、3行があり、テーブルの値が0,1,2の場合は_idです。そうではありません。

その値_idの列は、テーブルの行の総数に関係なく増加します。たとえば、最初に3行がある場合は、_idを0,1,2とすることができます。次に、最初の2行を削除して同じ2行を追加すると、2、3、4が_idとなります。

テーブル内の行を一意に識別するには、行の削除や追加を変更しない独自のID(UUIDなど)を別の列に定義する必要があります。

+0

これを達成する方法はありますか? –

+0

メモを作成する際に、それぞれに固有のIDを作成していますUUIDを使ってユニークなIDを生成することができます: 'UUID.randomUUID()。toString()'。そして、そのIDをノートテーブルのカラムに保存します。テーブルからノートを削除するid。 – Bob

+0

私はそれに亀裂を与えるよ –

関連する問題