Android中的SQLite如何更新特定行

EGH*_*HDK 131 java sql eclipse sqlite android

我一直在尝试更新特定的行一段时间,似乎有两种方法可以做到这一点.根据我的阅读和尝试,你可以使用:

execSQL(String sql) 方法

或者:

update(String table, ContentValues values, String whereClause, String[] whereArgs) 方法.

(让我知道这是不正确的,因为我是Android新手,对SQL很新.)

那么让我来看看我的实际代码.

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

我想完成这个:

更新Field1,Field2和Field3,其中主键(_id)等于1.

Eclipse在"更新"一词的下方给了我一条红线,并给出了我的解释:

SQLiteDatabase类型中的方法update(String,ContentValues,String,String [])不适用于参数(String,String,String,null)

我猜我没有正确分配ContentValues.谁能指出我正确的方向?

Akh*_*hil 277

首先制作一个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");
Run Code Online (Sandbox Code Playgroud)

然后使用更新方法,它现在应该工作:

myDB.update(TableName, cv, "_id="+id, null);
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是一次走动.db.update()的第三个参数应该只是where子句,第四个是实际的条件值.在这种情况下,该行应该是:`myDB.update(TableName,cv,"_ id =?",new String [] {id})`.SQLite会自动将第四个参数填入"?" 在第三个参数中,即WHERE子句.如果你的第三个参数包含n"?",则第四个参数应该是长度为n的String [] (10认同)
  • 如果我想检查,如果表中是否存在该行,然后决定是否更新或插入行,该怎么办? (2认同)

Yaq*_*mad 48

简单方法:

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

myDataBase.execSQL(strSQL);
Run Code Online (Sandbox Code Playgroud)

  • 此代码将抛出IllegalArgumentException.如果你在没有ContentValues的情况下执行查询,那么最好避免使用第二个参数.喜欢:myDataBase.execSQL(strSQL); (6认同)

fun*_*der 37

首先创建一个ContentValues对象:

ContentValues cv = new ContentValues();
cv.put("Field1","Bob");
cv.put("Field2","19");
Run Code Online (Sandbox Code Playgroud)

然后使用更新方法.注意,第三个参数是where子句."?" 是一个占位符.它将被替换为第四个参数(id)

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

这是更新特定行的清除解决方案.

  • 那是什么?做? (2认同)

Kar*_*som 24

  1. 我个人更喜欢.update以方便.但execsql也会一样.
  2. 您的猜测是正确的,问题是您的内容价值.您应该创建一个ContentValue对象并将数据库行的值放在那里.

此代码应修复您的示例:

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


Mur*_*n.P 11

你可以尝试这个......

db.execSQL("UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=6 ");
Run Code Online (Sandbox Code Playgroud)


小智 5

您在 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);
Run Code Online (Sandbox Code Playgroud)


Rah*_*dia 5

在你的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;
     }
Run Code Online (Sandbox Code Playgroud)

在sample.java中更新使用此代码

  //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();
Run Code Online (Sandbox Code Playgroud)


sac*_*chi 5

希望这对您有帮助:

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;   
 }
Run Code Online (Sandbox Code Playgroud)