SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

सूची को अपडेट और डिलीट कैसे करें क्लिक श्रोता के साथ SQLite डेटाबेस में डेटा देखें?

<ब्लॉकक्वॉट>

अब मैं उन सूचीदृश्य को नए अपडेटएक्टिटी में चयनित मान प्राप्त करना चाहता हूं ताकि मैं संपादित या हटा सकूं। यह कैसे करें।

यहां एक कार्यशील उदाहरण दिया गया है जो अपडेट करता है (अपडेटएक्टिविटी पर जाता है) और हटाता है (किसी आइटम के लॉन्ग क्लिक पर)। यह एक CursorAdapter, अर्थात् स्टॉक SimpleCursorAdapter का उपयोग करता है। SQLite डेटा के लिए कर्सर एडेप्टर का उपयोग करना बहुत आसान है।

सबसे पहले डेटाबेस हेल्पर :-

class DatabaseHelper extends SQLiteOpenHelper {
    public DatabaseHelper(@Nullable Context context) {
        super(context, "mydatabase", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS mytable (_id INTEGER PRIMARY KEY, name TEXT, surname TEXT, phone TEXT)");
        /* Add some test data */
        add("Fred","Bloggs","0000000000",sqLiteDatabase);
        add("Jane","Doe","1111111111",sqLiteDatabase);
        add("Mary","Johnston","2222222222",sqLiteDatabase);
        add("Tom","cobboly","3333333333",sqLiteDatabase);
        add("Anne","Walker","4444444444",sqLiteDatabase);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public long update(long id, String name, String surname, String phone) {
        long rv = 0;
        ContentValues cv = new ContentValues();
        if (name != null && name.length() > 0) cv.put("name",name);
        if (surname != null && surname.length() > 0) cv.put("surname",surname);
        if (phone != null && phone.length() > 0) cv.put("phone",phone);
        if (cv.size() > 0) rv = this.getWritableDatabase().update("mytable",cv,"_id=?",new String[]{String.valueOf(id)});
        return rv;
    }

    public long delete(long id) {
        return this.getWritableDatabase().delete("mytable","_id=?",new String[]{String.valueOf(id)});
    }

    public Cursor getAll() {
        return this.getWritableDatabase().query("mytable",null,null,null,null,null,null);
    }

    public Cursor getById(long id) {
        return this.getWritableDatabase().query("mytable",null,"_id=?",new String[]{String.valueOf(id)},null,null,null);
    }

    private long add(String name, String surname, String phone, SQLiteDatabase db) {
        ContentValues cv = new ContentValues();
        cv.put("name",name);
        cv.put("surname",surname);
        cv.put("phone",phone);
        return db.insert("mytable",null,cv);
    }

    public long add(String name, String surname, String phone) {
        return add(name,surname,phone,this.getWritableDatabase());
    }
}
  • महत्वपूर्ण नोट कर्सर एडेप्टर को एक आईडी कॉलम की आवश्यकता होती है और इसका नाम _id . होना चाहिए ।
  • ध्यान दें यह कुछ परीक्षण डेटा जोड़ता है।
  • सभी एक्सेस विधियां शामिल हैं
    • getAll तालिका से सभी पंक्तियों के साथ एक कर्सर लौटाता है।
    • अपडेट किए गए मानों के अनुसार अपडेट अपडेट करें, यह केवल मानों को अपडेट करने के लिए पूरा करता है (उदाहरण के लिए कोई संपादन उपनाम एडिटटेक्स्ट नहीं है, नल पास हो गया है इसलिए उपनाम वैसे ही रहता है।)
    • getById आईडी के अनुसार सभी मानों वाला एक कर्सर लौटाता है
    • चौथे पैरामीटर के बिना जोड़ना सामान्य जोड़ है, चौथा पैरामीटर वाला यह है कि DatabaaeHelper के पूरी तरह से इंस्टेंट होने से पहले इसे onCreate में उपयोग करने की अनुमति दी जाए।

ListDataActivity

public class ListDataActivity extends AppCompatActivity {

    ListView listview;
    SimpleCursorAdapter sca;
    DatabaseHelper databaseHelper;
    Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = this.findViewById(R.id.mylistview);
        databaseHelper = new DatabaseHelper(this);
        setOrRefreshListView();
    }

    /* handles the ListView */
    private void setOrRefreshListView() {
        cursor = databaseHelper.getAll(); /* Gets the data to be listed */
        /* If first time then setup the adapter listeners etc */
        if (sca == null) {
            sca = new SimpleCursorAdapter(
                    this,
                    android.R.layout.simple_expandable_list_item_2,
                    cursor,
                    new String[]{"name","phone"},
                    new int[]{android.R.id.text1, android.R.id.text2},
                    0
            );
            listview.setAdapter(sca); // attach the adapter to the listview
            // setup On Item Click to start the update activity passing the id
            listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    Intent intent = new Intent(ListDataActivity.this,UpdateActivity.class);
                    intent.putExtra("my_id_extra",l);
                    startActivity(intent);
                }
            });
            // setup the on Item LONG Click to delete a row
            listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                    databaseHelper.delete(l);
                    setOrRefreshListView(); // after deletion refresh the data
                    return true;
                }
            });
        } else {
            sca.swapCursor(cursor); // if not the first time just tell the adapter the data has changed
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        setOrRefreshListView(); // refresh the listview when returning to the activity
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cursor.close(); // clean up
    }
}

ListDataActivity के लिए लेआउट (बहुत ही बुनियादी सिर्फ एक ListView) :-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ListDataActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <ListView
        android:id="@+id/mylistview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/teal_200"
        >
    </ListView>

</LinearLayout>
  • पृष्ठभूमि सेट ताकि सूची दृश्य को देखना आसान हो।

अपडेट गतिविधि :-

public class UpdateActivity extends AppCompatActivity {

    DatabaseHelper databaseHelper;
    EditText editName, editPhone;
    Button saveButtonId,showButtonId;
    long currentId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update);
        editName = this.findViewById(R.id.editName);
        editPhone = this.findViewById(R.id.editPhone);
        saveButtonId = this.findViewById(R.id.savebuttonId);
        showButtonId = this.findViewById(R.id.showbuttonId);
        databaseHelper = new DatabaseHelper(this);
        currentId =  this.getIntent().getLongExtra("my_id_extra",-1);
        if (currentId < 0 ) {
            // do something as invalid id passed
            finish();
        }
        showData();
        showButtonId.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        saveButtonId.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                databaseHelper.update(currentId,editName.getText().toString(),null,editPhone.getText().toString());
            }
        });
    }

    private void showData() {
        Cursor cursor = databaseHelper.getById(currentId);
        if (cursor.moveToFirst()) {
            editName.setText(cursor.getString(cursor.getColumnIndex("name")));
            editPhone.setText(cursor.getString(cursor.getColumnIndex("phone")));
        }
        cursor.close();
    }
}
  • शोडेटा बटन ListDataActivity पर वापस आ जाता है (मेरा मानना ​​है कि आप यही चाहते थे)।

परिणाम :-

  1. नई शुरुआत कब हुई :-

  1. मैरी पर क्लिक करें (और नंबर को 999999999 में एडिट करें लेकिन सेव नहीं करें) :-

  2. सहेजें पर क्लिक करें (2 के समान)

  3. दिखाएँ क्लिक करें :-

  1. लॉन्ग क्लिक फ्रेड :-

  1. ऐप को रीस्टार्ट करें:-




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite रिप्लेस स्टेटमेंट

  2. SQLite डेटाबेस में दृश्यों को सूचीबद्ध करने के 4 तरीके

  3. पता लगाएँ कि क्या किसी मान में SQLite में कम से कम एक संख्यात्मक अंक है

  4. क्या ऑनअपग्रेड विधि को कभी कहा जाता है?

  5. SQLite ट्रिम () कैसे काम करता है