【问题标题】:How to update a SQLite database in android?如何在 android 中更新 SQLite 数据库?
【发布时间】:2017-11-01 09:20:33
【问题描述】:

我正在尝试使用整数值更新 SQLite 数据库表。我尝试了 2 种方法,第一种方法不更新表,第二种方法给出 SQLiteException。 第一次使用更新方法:-

public void updateBookQty(String quantity,String bookId)
{
    SQLiteDatabase db = this.getWritableDatabase();

    int updateQty = getQuantity(bookId) - Integer.parseInt(quantity) ;

    ContentValues values = new ContentValues();
    values.put(KEY_QTY,updateQty);


    try{

        db.update(BOOKS_TABLE, values, KEY_BOOK_ID+ " = ?",
                new String[] { String.valueOf(bookId) });

        Log.d("BookUpdate", String.valueOf(updateQty));

    }catch (SQLException e)
    {
        Log.d("UpdateError",e.toString());
    }

} 

第二次使用 execSQL:-

public void updateQty(Integer qty,String bookId)
{
    int originalQty = getQuantity(bookId);
    int updateQty = originalQty - qty;
    try{
        SQLiteDatabase db = this.getWritableDatabase();
        String rawQuery = "update "+BOOKS_TABLE+" set "+KEY_QTY+" = "+updateQty+ " where "+KEY_BOOK_ID+" = "+bookId+" ;" ;
        db.execSQL(rawQuery);
        db.close();
        Log.v("UpdateQty", "Qty updated");
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
}

这里我得到一个 SQLiteException:-

System.err:android.database.sqlite.SQLiteException:靠近“0000169”: 语法错误(代码 1):,编译时:更新 books_table 集 数量 = -10 其中 book_id = BK 0000169 ;

【问题讨论】:

  • 不要使用execSQL更新,见stackoverflow.com/a/17027063/3635454
  • db.update 返回一个int,它是受影响的行数。您确定它在您的情况下返回 0 吗?此外,由于bookId 是一个字符串,因此没有理由这样做:String.valueOf(bookId),只需传递bookId 变量
  • @pleft 我尝试为 bookId 删除 String.valueOf。是的,我尝试记录受影响的行数,它返回 0。您认为可能导致此问题的原因是什么。
  • 您能否更新您的问题并发布有关数据库表books_table 的一些信息以及您要更新的行?我想您的where 子句中可能没有匹配项,这意味着没有book_id 值与参数bookId 的值相同(BK 0000169)。但是您必须向我们提供更多信息,所以请更新问题
  • @pleft 我传递了错误的要更新的 ID。代码没有问题。

标签: java android sql database sqlite


【解决方案1】:

试试这个,

public void updateQty(Integer qty,String bookId)
 {
   int originalQty = getQuantity(bookId);
   int updateQty = originalQty - qty;
try{
    SQLiteDatabase db = this.getWritableDatabase();
    String rawQuery = "update " + BOOKS_TABLE + " set " + KEY_QTY + " = " + updateQty + " where " + KEY_BOOK_ID + " = '" + bookId + "';";

    db.execSQL(rawQuery);
    db.close();
    Log.v("UpdateQty", "Qty updated");
}
catch(Exception ex)
{
    ex.printStackTrace();
}
}

【讨论】:

  • 谢谢,这解决了 SQLiteException。我实际上传递了错误的 id,这就是数据库没有更新的原因。
【解决方案2】:

由于您的 id 是字符串,因此您必须引用该值,尤其是。它包含空格:

String rawQuery = "update "+BOOKS_TABLE
    + " set "+KEY_QTY+" = "+updateQty
    + " where "+KEY_BOOK_ID+" = '"+bookId+"';" ;

【讨论】:

  • 现在我没有收到错误但它没有更新数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多