Android এ SQLite কীভাবে একটি নির্দিষ্ট সারি আপডেট করবেন


138

আমি এখনই কিছুক্ষণের জন্য একটি নির্দিষ্ট সারি আপডেট করার চেষ্টা করেছি এবং মনে হচ্ছে এটি করার দুটি উপায় আছে। আমি যা পড়েছি এবং চেষ্টা করেছি সেখান থেকে আপনি কেবল এটি ব্যবহার করতে পারেন:

execSQL(String sql) পদ্ধতি

অথবা:

update(String table, ContentValues values, String whereClause, String[] whereArgs) পদ্ধতি।

(আমি অ্যান্ড্রয়েডে নতুন এবং এসকিউএল-এ খুব নতুন হিসাবে এটি ভুল হয় কিনা তা আমাকে জানান))

সুতরাং আমাকে আমার আসল কোডটি পেতে দিন।

myDB.update(TableName, "(Field1, Field2, Field3)" + " VALUES ('Bob', 19, 'Male')", "where _id = 1", null);

আমি এটি সম্পাদন করার চেষ্টা করছি:

ফিল্ড 1, ফিল্ড 2 এবং ফিল্ড 3 আপডেট করুন যেখানে প্রাথমিক কী (_id) 1 এর সমান।

গ্রহণ "আপডেট" শব্দের নীচে আমাকে একটি লাল রেখা দেয় এবং আমাকে এই ব্যাখ্যা দেয়:

এসকিউএলডিটি ডাটাবেস টাইপটিতে পদ্ধতি আপডেট (স্ট্রিং, কন্টেন্টভ্যালিউস, স্ট্রিং, স্ট্রিং []) আর্গুমেন্টের জন্য প্রযোজ্য নয় (স্ট্রিং, স্ট্রিং, স্ট্রিং, নাল)

আমি অনুমান করছি যে আমি কন্টেন্টভ্যালুগুলি সঠিকভাবে বরাদ্দ করছি না। কেউ কি আমাকে সঠিক দিকে নির্দেশ করতে পারে?

উত্তর:


289

প্রথমে একটি কন্টেন্টভ্যালুজ অবজেক্ট করুন:

ContentValues cv = new ContentValues();
cv.put("Field1","Bob"); //These Fields should be your String values of actual column names
cv.put("Field2","19");
cv.put("Field2","Male");

তারপরে আপডেট পদ্ধতিটি ব্যবহার করুন, এটি এখন কাজ করা উচিত:

myDB.update(TableName, cv, "_id="+id, null);

গ্রহন আমাকে "ফিল্ড 1", "ফিল্ড 2" এবং "ফিল্ড 3" তে লাল আন্ডারলাইন দিচ্ছে। পরামর্শ?
EGHDK

1
দুঃখিত, আমি ভেবেছিলাম সেগুলি আপনার কোডে ঘোষিত ভেরিয়েবল। তাদের ডাবল উদ্ধৃতিতে রাখুন।
আখিল

সঠিক উত্তর সহ প্রথম হয়েছেন বলে ধন্যবাদ আমাকে অনেক সময় বাঁচিয়েছে। অনেক প্রশংসিত.
EGHDK

2
আমি যদি চেক করতে চাই, যদি সেই সারিটি টেবিলে উপস্থিত থাকে বা না এবং তারপরে কোনও সারিটি আপডেট বা সন্নিবেশ করানোর সিদ্ধান্ত নেয়?
আকাশ রাঘব

11
এটি আসলে হাঁটাচলা। Db.update () এর তৃতীয় পরমটি কেবল যেখানে ক্লজ হওয়া উচিত এবং চতুর্থটি হ'ল প্রকৃত শর্তের মান। এই ক্ষেত্রে, লাইন হওয়া উচিত: myDB.update(TableName, cv, "_id=?", new String[]{id})। এসকিউএলাইট স্বয়ংক্রিয়ভাবে "" মধ্যে চতুর্থ পরম পূরণ করবে? তৃতীয় প্যারামে, যেখানে পুরো ধারাটিতে। যদি আপনার তৃতীয় প্যারামে ""? "গুলি থাকে তবে চতুর্থ পরমটি দৈর্ঘ্যের একটি স্ট্রিং [] হওয়া উচিত
ক্রিশ্চিয়ানোওয়াইএল

48

সহজ উপায়:

String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue;

myDataBase.execSQL(strSQL);

6
এই কোডটি অবৈধআর্গুমেন্টএক্সেপশন নিক্ষেপ করবে। আপনি যদি কন্টেন্টভ্যালু ছাড়া কোয়েরিটি সম্পাদন করেন তবে দ্বিতীয় যুক্তিটি একেবারে এড়িয়ে যাওয়া আরও ভাল। লাইক: myDataBase.execSQL (strSQL);
ইগোর ভি সাভচেঙ্কো

execSQL()আপডেটের জন্য ব্যবহার কাজ করবে না। আপডেটের সাথে এক্সিকিউএসকিউএল () পড়ুন আপডেট হয় না
রওশন পিটিগালা

এটি করার ক্ষেত্রে একটি গুরুতর সুরক্ষা ঝুঁকি রয়েছে কারণ কেউ এসকিউএল স্টেটমেন্টটি 'কিছু ভ্যালু' ভেরিয়েবলের কাছে দিতে পারে, যা পুরো ডাটাবেসকে পরিবর্তন করতে পারে। সুতরাং কোনও ডাটাবেস ক্রিয়াকলাপ করার সময় সর্বদা প্রস্তুত বিবৃতি দেওয়ার চেষ্টা করুন।
অচিন্থা ইসুর

42

প্রথমে একটি কনটেন্টভ্যালিউজ অবজেক্ট তৈরি করুন :

ContentValues cv = new ContentValues();
cv.put("Field1","Bob");
cv.put("Field2","19");

তারপরে আপডেট পদ্ধতিটি ব্যবহার করুন। দ্রষ্টব্য, তৃতীয় যুক্তি হল যেখানে ধারা। দ্য "?" একটি স্থানধারক। এটি চতুর্থ আর্গুমেন্ট (আইডি) দিয়ে প্রতিস্থাপন করা হবে

myDB.update(MY_TABLE_NAME, cv, "_id = ?", new String[]{id});

এটি একটি নির্দিষ্ট সারি আপডেট করার সবচেয়ে পরিষ্কার সমাধান।


ব্যবহারের পর থেকে সবচেয়ে ভাল উপায়? নিরাপদ.
আকাশ আগরওয়াল

1
এবং এটি কি করে? না?
alphiii

1
সাথে প্যারামিটার পদ্ধতির সাথে? সেরা এবং সবচেয়ে নিরাপদ উপায়। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। বর্গক্ষেত্রের বিবৃতি রচনা করার সময় স্ট্রিং কনটেনটেশন ব্যবহার করবেন না!
গ্রিসগ্রাম

ক্লজ যেখানে দুটি ক্ষেত্র রয়েছে সেখানে কীভাবে ব্যবহার করবেন?
বনে ইসহাক কে

24
  1. আমি ব্যক্তিগতভাবে তার সুবিধার্থে। আপডেট। তবে এক্সিকিউএল একই কাজ করবে।
  2. আপনার অনুমানের সাথে আপনি ঠিক আছেন যে সমস্যাটি আপনার সামগ্রীর মান। আপনার একটি কন্টেন্টভ্যালু অবজেক্ট তৈরি করা উচিত এবং আপনার ডাটাবেস সারিটির জন্য মানগুলি রাখা উচিত।

এই কোডটি আপনার উদাহরণটি ঠিক করবে:

 ContentValues data=new ContentValues();
 data.put("Field1","bob");
 data.put("Field2",19);
 data.put("Field3","male");
 DB.update(Tablename, data, "_id=" + id, null);

12

আপনি এটি চেষ্টা করতে পারেন ...

db.execSQL("UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=6 ");

6

আশা করি এটি আপনাকে সহায়তা করবে:

public boolean updatedetails(long rowId, String address)
  {
     SQLiteDatabase mDb= this.getWritableDatabase();
   ContentValues args = new ContentValues();
   args.put(KEY_ROWID, rowId);          
   args.put(KEY_ADDRESS, address);
  return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)>0;   
 }

5

আপনি এসকিউএলাইটে এই এক আপডেট পদ্ধতিটি ব্যবহার করে দেখুন

int id;
ContentValues con = new ContentValues();
con.put(TITLE, title);
con.put(AREA, area);
con.put(DESCR, desc);
con.put(TAG, tag);
myDataBase.update(TABLE, con, KEY_ID + "=" + id,null);

5

আপনার ডিবি this এ এই কোডটি ব্যবহার করুন `

public boolean updatedetails(long rowId,String name, String address)
      {
       ContentValues args = new ContentValues();
       args.put(KEY_ROWID, rowId);          
       args.put(KEY_NAME, name);
       args.put(KEY_ADDRESS, address);
       int i =  mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null);
    return i > 0;
     }

আপনার নমুনা আপডেট করার জন্য। জাভা এই কোডটি ব্যবহার করুন

  //DB.open();

        try{
              //capture the data from UI
              String name = ((EditText)findViewById(R.id.name)).getText().toString().trim();
              String address =(EditText)findViewById(R.id.address)).getText().toString().trim();

              //open Db
              pdb.open();

              //Save into DBS
              pdb.updatedetails(RowId, name, address);
              Toast.makeText(this, "Modified Successfully", Toast.LENGTH_SHORT).show();
              pdb.close();
              startActivity(new Intent(this, sample.class));
              finish();
        }catch (Exception e) {
            Log.e(TAG_AVV, "errorrrrr !!");
            e.printStackTrace();
        }
    pdb.close();

3

এটির মতো চেষ্টা করতে পারেন:

ContentValues values=new ContentValues();
values.put("name","aaa");
values.put("publisher","ppp");
values.put("price","111");

int id=sqdb.update("table_name",values,"bookid='5' and booktype='comic'",null);

2

যদি আপনার স্ক্লাইট সারিটির একটি অনন্য আইডি বা অন্যান্য সমমান হয়, আপনি যেখানে ক্লোজ, এটির মতো ব্যবহার করতে পারেন

update .... where id = {here is your unique row id}

এখনও আমার প্রশ্নে বর্ণিত একই ত্রুটি পেয়েছি। আমি তৃতীয় প্যারামিটার (স্ট্রিং যেখানে ক্লাওস) এ পরিবর্তন করেছি "where _id = 1"। পরিবর্তনটি আমার প্রশ্নের মধ্যেও প্রতিফলিত হয়েছে।
EGHDK

2

আপডেটের জন্য, পরিবর্তনগুলি এর মতো প্রতিশ্রুতিবদ্ধ হওয়ার জন্য সেটট্র্যাশনসইসকসফুলকে কল করতে হবে:

db.beginTransaction();
try {
    db.update(...) 
    db.setTransactionSuccessfull(); // changes get rolled back if this not called
} finally {
   db.endTransaction(); // commit or rollback
}

2

// আপডেটের জন্য এখানে কিছু সাধারণ নমুনা কোড রয়েছে

// প্রথমে এটি ঘোষণা করুন

private DatabaseAppHelper dbhelper;
private SQLiteDatabase db;

// নিম্নলিখিত সূচনা

dbhelper=new DatabaseAppHelper(this);
        db=dbhelper.getWritableDatabase();

// আপডেটের কোড

 ContentValues values= new ContentValues();
                values.put(DatabaseAppHelper.KEY_PEDNAME, ped_name);
                values.put(DatabaseAppHelper.KEY_PEDPHONE, ped_phone);
                values.put(DatabaseAppHelper.KEY_PEDLOCATION, ped_location);
                values.put(DatabaseAppHelper.KEY_PEDEMAIL, ped_emailid);
                db.update(DatabaseAppHelper.TABLE_NAME, values,  DatabaseAppHelper.KEY_ID + "=" + ?, null);

// 'প্রশ্ন চিহ্ন' এর পরিবর্তে আপনার আইডি রাখুন আমার ভাগ করা পছন্দসমূহের একটি ক্রিয়া।


2
 public void updateRecord(ContactModel contact) {
    database = this.getReadableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COLUMN_FIRST_NAME, contact.getFirstName());
    contentValues.put(COLUMN_LAST_NAME, contact.getLastName());
    contentValues.put(COLUMN_NUMBER,contact.getNumber());
    contentValues.put(COLUMN_BALANCE,contact.getBalance());
    database.update(TABLE_NAME, contentValues, COLUMN_ID + " = ?", new String[]{contact.getID()});
    database.close();
}

1

শুধু এইভাবে চেষ্টা করুন

  String strFilter = "_id=" + Id;
  ContentValues args = new ContentValues();
  args.put(KEY_TITLE, title);
  myDB.update("titles", args, strFilter, null);**

1

এসকিউএলটিতে আপডেটের পদ্ধতি:

public void updateMethod(String name, String updatename){
    String query="update students set email = ? where name = ?";
    String[] selections={updatename, name};
    Cursor cursor=db.rawQuery(query, selections);
}

1
SQLiteDatabase myDB = this.getWritableDatabase();

ContentValues cv = new ContentValues();
cv.put(key1,value1);    
cv.put(key2,value2); /*All values are your updated values, here you are 
                       putting these values in a ContentValues object */
..................
..................

int val=myDB.update(TableName, cv, key_name +"=?", new String[]{value});

if(val>0)
 //Successfully Updated
else
 //Updation failed

0
public long fillDataTempo(String table){
    String[] table = new String[1];
    tabela[0] = table; 
    ContentValues args = new ContentValues();
    args.put(DBOpenHelper.DATA_HORA, new Date().toString());
    args.put(DBOpenHelper.NOME_TABELA, nome_tabela);
    return db.update(DATABASE_TABLE, args, STRING + " LIKE ?" ,tabela);
}

0

কন্টেন্টভ্যালুজে আপডেট হতে চলেছে কেবল সারি আইড এবং ধরণের ডেটা দিন।

সর্বজনীন শূন্য আপডেট স্ট্যাটাস (স্ট্রিং আইডি, ইনট স্ট্যাটাস) {

এসকিউএলডেটাবেস ডিবি = this.getWritableDatedia ();

কন্টেন্টভ্যালু ডেটা = নতুন কন্টেন্টভ্যালু ();

ডেটা.পুট ("স্ট্যাটাস", স্ট্যাটাস);

db.update (টেবিলের নাম, তথ্য, "কলাম নাম" + "=" + আইডি, নাল);

}


0

আমি একটি সম্পূর্ণ উদাহরণ দিয়ে প্রদর্শিত হবে

এভাবে আপনার ডাটাবেস তৈরি করুন

    import android.content.Context
    import android.database.sqlite.SQLiteDatabase
    import android.database.sqlite.SQLiteOpenHelper

    class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
        override fun onCreate(db: SQLiteDatabase) {
            val createProductsTable = ("CREATE TABLE " + Business.TABLE + "("
                    + Business.idKey + " INTEGER PRIMARY KEY AUTOINCREMENT ,"
                    + Business.KEY_a + " TEXT, "
                    + Business.KEY_b + " TEXT, "
                    + Business.KEY_c + " TEXT, "
                    + Business.KEY_d + " TEXT, "
                    + Business.KEY_e + " TEXT )")
            db.execSQL(createProductsTable)
        }
        override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
            // Drop older table if existed, all data will be gone!!!
            db.execSQL("DROP TABLE IF EXISTS " + Business.TABLE)
            // Create tables again
            onCreate(db)

        }
        companion object {
            //version number to upgrade database version
            //each time if you Add, Edit table, you need to change the
            //version number.
            private val DATABASE_VERSION = 1

            // Database Name
            private val DATABASE_NAME = "business.db"
        }
    }

তারপরে সিআরইউডি করার সুবিধার্থে একটি শ্রেণি তৈরি করুন -> তৈরি করুন | পড়া | আপডেট | মুছুন

class Business {
    var a: String? = null
    var b: String? = null
    var c: String? = null
    var d: String? = null
    var e: String? = null

    companion object {
        // Labels table name
        const val TABLE = "Business"
        // Labels Table Columns names
        const val rowIdKey = "_id"
        const val idKey = "id"
        const val KEY_a = "a"
        const val KEY_b = "b"
        const val KEY_c = "c"
        const val KEY_d = "d"
        const val KEY_e = "e"
    }
}

এখন আসে ম্যাজিক

import android.content.ContentValues
import android.content.Context

    class SQLiteDatabaseCrud(context: Context) {
        private val dbHelper: DBHelper = DBHelper(context)

        fun updateCart(id: Int, mBusiness: Business) {
            val db = dbHelper.writableDatabase
            val valueToChange = mBusiness.e
            val values = ContentValues().apply {
                put(Business.KEY_e, valueToChange)
            }
            db.update(Business.TABLE, values, "id=$id", null)
            db.close() // Closing database connection
        }
    }

আপনাকে অবশ্যই আপনার পণ্যসামগ্রী তৈরি করতে হবে যা অবশ্যই একটি কার্সর অ্যাডাপ্টার ফেরত দিতে হবে

সুতরাং একটি ক্রিয়াকলাপে ঠিক এইভাবে ফাংশন কল

internal var cursor: Cursor? = null
internal lateinit var mProductsAdapter: ProductsAdapter

 mSQLiteDatabaseCrud = SQLiteDatabaseCrud(this)
    try {
        val mBusiness = Business()
        mProductsAdapter = ProductsAdapter(this, c = todoCursor, flags = 0)
        lstProducts.adapter = mProductsAdapter


        lstProducts.onItemClickListener = OnItemClickListener { parent, view, position, arg3 ->
                val cur = mProductsAdapter.getItem(position) as Cursor
                cur.moveToPosition(position)
                val id = cur.getInt(cur.getColumnIndexOrThrow(Business.idKey))

                mBusiness.e = "this will replace the 0 in a specific position"
                mSQLiteDatabaseCrud?.updateCart(id ,mBusiness)

            }

        cursor = dataBaseMCRUD!!.productsList
        mProductsAdapter.swapCursor(cursor)
    } catch (e: Exception) {
        Log.d("ExceptionAdapter :",""+e)
    }

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.