更新不';不工作sqlite android

更新不';不工作sqlite android,android,sqlite,Android,Sqlite,更新表中的列时出现问题。我尝试了这两种解决方案: this.openDataBase(); String SQLStatement = "update " + TABLE_POSES; SQLStatement += " set " + COLUMN_SKIP + "=" + SKIP + " Where "; SQLStatement += COLUMN_ID + "=" + String.valueOf(skipPoseId);

更新表中的列时出现问题。我尝试了这两种解决方案:

        this.openDataBase();
        String SQLStatement = "update " + TABLE_POSES;
        SQLStatement += " set " + COLUMN_SKIP + "=" + SKIP + " Where ";
        SQLStatement += COLUMN_ID + "=" + String.valueOf(skipPoseId);
        myDataBase.rawQuery(SQLStatement, null);
        this.close();
这是:

        this.openDataBase();
        ContentValues args = new ContentValues();
        args.put(COLUMN_SKIP,SKIP);
        myDataBase.update(TABLE_POSES, args, COLUMN_ID + "=" +  String.valueOf(skipPoseId),null);
        this.close();

这两个代码段都不起作用,我也不会抛出任何异常。我做错了什么?

您应该使用第二种方法,使用
update()
并检查返回值。如果该值为零,则数据库的状态不是您期望的状态,并且没有更新任何行。如果行不是零,则更新成功

如果访问数据库时出现任何问题,则在调用
update()
之前会引发异常

我会像这样利用
update()
的args参数:

myDataBase.update(TABLE_POSES, args, COLUMN_ID + " = ?", new String[]{ Long.toString(skipPoseId) });
像这样使用更新

        String query="UPDATE tablename SET columnname="+var+ "where columnid="+var2;
        sqlitedb.execSQL(query);

只需在字符串查询中编写更新查询并执行。

如果在代码中使用
db.begintransaction()
,则必须在
db.endtransaction()之前调用
db.setTransactionSuccessful()
,例如:

try {
        SQLHelper dbHelper = new SQLHelper(this);
        SQLiteDatabase db = dbHelper.getWritableDatabase();

        db.beginTransaction();
        ...................

        db.setTransactionSuccessful();

        db.endTransaction();

        db.close();

} 
catch (Exception ex){

}

我也有同样的问题。经过深思熟虑和调试,我发现WHERE条件没有处理表中的任何行


奇怪的是,myDatabase.update命令以1作为返回值,我认为它是受更新影响的1行。

是否有错误?你能发布你的日志吗?我根本没有得到任何异常抛出。我还尝试使用beginTransaction();和setTransactionSuccessful()语句,但这没有更改。如何检查行是否正在更新?除非Android代码中存在错误,否则1表示一行已更新。根据应用程序的行为,我可以判断该列未更新。@Kristy您应该通过在SQLite Manager中提取数据库来检查数据库,行是否已更新。如果是,则代码中可能存在错误。我不想建议这样做,但肯定有其他错误发生。您的更新正在运行。如果在模拟器上运行它,那么可以使用Eclipse的DDMS插件检索SQLite数据库文件。数据库位于/data/data//databases/中。您可以在任何SQLite客户端中打开它,您将看到更新正在工作。检查文件是表明你做得对的最好方式。很高兴听到它!当数据库处于特定状态时,代码中仍可能有一个bug,它会再次出现。使用准备好的语句更安全