您可以使用SQLiteDatabse update()将列设置为等于表中的另一列吗?

时间:2018-04-26 08:57:18

标签: android android-sqlite android-database

我需要使列等于表中的另一列。我无法使用SQLiteDatabase的更新方法来解决这个问题。

我知道SQL语句是:

UPDATE coolTable SET columnA = columnB;

我把它放在ContentValues中我传递了函数吗?还是选择字符串?

2 个答案:

答案 0 :(得分:1)

您只能使用update()来设置文字值(作为绑定参数),而不是sqlite SQL syntax支持的任何其他类型的表达式。

使用execSQL()以列名表达式执行原始UPDATE查询。

答案 1 :(得分:0)

execSQL()错误检查:

SQLiteDatabase db = getReadableDatabase();

try {
    long count = DatabaseUtils.queryNumEntries(db, "pweb");
    db.execSQL("update pweb set h_id = _id;");
    long rows = DatabaseUtils.longForQuery(db, "SELECT changes()", null);
    if(count != rows ) Log.e("wrong count","update failed");
 }
catch(SQLException e){
  Log.e("SQLException","update failed");            
}  

db.close();
  

但我想知道是否可以使用数据库的更新()   函数而不是execSQL()

您可以使用sqlite3查看和操作数据,并测试sql命令。

创建一个表格:

CREATE TABLE pweb (_id INTEGER PRIMARY KEY,h_id  INTEGER ,sent  INTEGER);

查看原始行:

sqlite> select * from pweb;
1|10|1
2|20|1
3|30|0
4|40|0

执行列更新:

sqlite> update pweb set h_id = _id;

查看对所有行的更改:

sqlite> select * from pweb;
1|1|1
2|2|1
3|3|0
4|4|0

更复杂的东西?

sqlite>  update pweb set h_id = _id + 1;

结果:

sqlite> select * from pweb;
1|2|1
2|3|1
3|4|0
4|5|0

另见Understanding SQLITE DataBase in Android