db.execSQL("update user set Name=? ,Nickname=?,Age=?",new Object[]{name,nickname,age}); Cursor cursor= db.rawQuery("select*from user where Account=?",new String[]{account}); editTextname.setText(cursor.getString(2)); editTextnickname.setText(cursor.getString(3)); editTextage.setText(cursor.getString(4)); cursor.close();显示更新的数据哪错了
时间: 2024-01-18 16:02:21 浏览: 31
这段代码有几个问题:
1. `update` 语句中的参数应该是按照字段的顺序传递的,而不是按照字段名称。因此,应该将 `Name`、`Nickname`、`Age` 改为对应的字段顺序(假设是第 2、3、4 个字段)。
2. 在执行 `rawQuery` 方法时,需要先调用 `moveToFirst` 方法将结果集指针移动到第一条记录上,然后才能获取数据。因此,在调用 `cursor.getString` 方法之前,应该先调用 `cursor.moveToFirst` 方法。
修改后的代码应该是这样的:
```
db.execSQL("update user set ?, ?, ? where Account=?", new Object[]{name, nickname, age, account});
Cursor cursor = db.rawQuery("select * from user where Account=?", new String[]{account});
if (cursor.moveToFirst()) {
editTextname.setText(cursor.getString(2));
editTextnickname.setText(cursor.getString(3));
editTextage.setText(cursor.getString(4));
}
cursor.close();
```
相关问题
db.execSQL("update user set Name=? ,Nickname=?,Age=?",new Object[]{name,nickname,age});错哪了
这段代码可能会抛出异常,原因是在SQL语句中缺少WHERE子句,导致会更新所有user表中的数据。应该加上WHERE条件来确定需要更新的行。例如:
```
db.execSQL("update user set Name=?, Nickname=?, Age=? where id=?", new Object[]{name, nickname, age, id});
```
其中,id是需要更新的用户的唯一标识符,在更新的时候需要传入。这样可以避免更新所有记录的情况发生。
db.execSQL("select * from user where name ="+name);
在执行SQL语句时,应该使用`query()`或`rawQuery()`方法,而不是`execSQL()`方法。`execSQL()`方法用于执行不返回结果集的SQL语句,例如CREATE、UPDATE、DELETE等语句,而`query()`或`rawQuery()`方法用于执行SELECT查询语句并返回结果集。另外,你应该使用参数化查询,避免SQL注入攻击。正确的写法如下:
```
Cursor cursor = db.rawQuery("SELECT * FROM user WHERE name = ?", new String[]{name});
```
这个语句使用了`rawQuery()`方法,并采用了参数化查询的方式,其中`?`表示占位符,`new String[]{name}`表示将`name`作为参数传入SQL语句中。这样可以确保查询语句的正确性,并避免SQL注入攻击。