Android의 SQLite 특정 행을 업데이트하는 방법
한동안 특정 행을 업데이트하려고 했는데 두 가지 방법이 있는 것 같습니다.제가 읽고 시도해 본 바로는, 다음과 같은 것을 사용할 수 있습니다.
execSQL(String sql)
방법
또는 다음 중 하나:
update(String table, ContentValues values, String whereClause, String[] whereArgs)
방법.
(안드로이드는 처음이고 SQL은 처음이라 틀리면 알려주세요.)
그럼 제 실제 코드로 넘어가죠.
myDB.update(TableName, "(Field1, Field2, Field3)" + " VALUES ('Bob', 19, 'Male')", "where _id = 1", null);
나는 이것을 실현하기 위해 노력하고 있다.
프라이머리 키(_id)가 1인 경우 Field1, Field2, 및 Field3을 업데이트합니다.
이클립스는 "업데이트"라는 단어 바로 아래에 빨간색 선을 표시하며 다음과 같은 설명을 제공합니다.
SQLiteDatabase 형식의 메서드 업데이트(String, ContentValues, String, String[])는 인수(String, String, String, null)에 적용할 수 없습니다.
ContentValues를 올바르게 할당하지 않은 것 같습니다.누가 나를 올바른 방향으로 인도해 줄 수 있나요?
먼저 ContentValues 개체를 만듭니다.
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 = ?", new String[]{id});
간단한 방법:
String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue;
myDataBase.execSQL(strSQL);
처음에 ContentValues 개체를 만듭니다.
ContentValues cv = new ContentValues();
cv.put("Field1","Bob");
cv.put("Field2","19");
그런 다음 업데이트 방법을 사용합니다.세 번째 인수는 where 절입니다.?는 자리 표시자입니다.네 번째 인수(id)로 대체됩니다.
myDB.update(MY_TABLE_NAME, cv, "_id = ?", new String[]{id});
이것은 특정 행을 갱신하는 가장 깨끗한 솔루션입니다.
- 개인적으로는 편리하기 때문에 .update를 선호합니다.단, execsql은 동일하게 동작합니다.
- 문제는 콘텐츠 가치라는 당신의 추측이 옳습니다.ContentValue 개체를 생성하고 데이터베이스 행의 값을 입력해야 합니다.
이 코드로 예를 수정할 수 있습니다.
ContentValues data=new ContentValues();
data.put("Field1","bob");
data.put("Field2",19);
data.put("Field3","male");
DB.update(Tablename, data, "_id=" + id, null);
이거 드셔보세요.
db.execSQL("UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=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;
}
SQLite에서 이 한 가지 업데이트 방법을 사용해 보십시오.
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);
DB에서 이 코드를 사용합니다.
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;
}
이 코드를 사용하여 sample.devails를 업데이트합니다.
//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();
다음과 같이 시도할 수 있습니다.
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);
sqlite 행에 고유 ID 또는 기타 등가어가 있는 경우 다음과 같이 where 구를 사용할 수 있습니다.
update .... where id = {here is your unique row id}
업데이트를 위해서는 set Transaction을 호출해야 합니다.다음과 같은 변경을 커밋할 수 있습니다.
db.beginTransaction();
try {
db.update(...)
db.setTransactionSuccessfull(); // changes get rolled back if this not called
} finally {
db.endTransaction(); // commit or rollback
}
//다음은 간단한 업데이트 샘플 코드입니다.
//먼저 선언합니다.
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);
//'물음표' 대신 ur id를 입력해 주세요.이것은, 제 공유 설정의 기능입니다.
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();
}
그냥 이렇게 해봐
String strFilter = "_id=" + Id;
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
myDB.update("titles", args, strFilter, null);**
SQLite 업데이트 방법:
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);
}
완벽한 예를 들어 설명하겠습니다.
이 방법으로 데이터베이스 작성
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"
}
}
그런 다음 CRUD를 지원하는 클래스를 만듭니다.-> Create |확인|갱신|삭제
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
}
}
CursorAdapter를 반환해야 하는 ProductAdapter를 생성해야 합니다.
활동에서는 함수를 이렇게 호출합니다.
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)
}
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
데이터베이스 행을 업데이트하기 위해 이 종류의 코드를 완료했습니다. 이것은 데이터베이스 핸들러 클래스의 코드입니다.
public Boolean updateData(String id,String name,String age,String gender){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(ID,id);
contentValues.put(NAME,name);
contentValues.put(AGE,age);
contentValues.put(GENDER,gender);
sqLiteDatabase.update(TABLE_NAME,contentValues,ID+"= ?",new String[]{id});
return true; //Boolean value return korbe
}
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);
}
ContentValues에서 업데이트할 데이터 유형과 rowId를 지정하기만 하면 됩니다.
public void update Status(String id, int status){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues 데이터 = 새 ContentValues();
data.put(상태)", 상태);
db.update(TableName, 데이터, "columnName" + " = "+id , null );
}
언급URL : https://stackoverflow.com/questions/9798473/sqlite-in-android-how-to-update-a-specific-row
'programing' 카테고리의 다른 글
컴파일러는 왜 부동소수점 *2를 지수 증분으로 최적화하지 않는가? (0) | 2022.08.29 |
---|---|
왜 기억을 먹는 사람은 기억을 먹지 않는 걸까요? (0) | 2022.08.29 |
size_t와 부호 없는 int의 차이점 (0) | 2022.08.28 |
vue.js에서 컴포넌트의 폭을 찾는 방법 (0) | 2022.08.28 |
vuejs - 구성 요소를 변수에 저장합니다. (0) | 2022.08.28 |