【发布时间】:2019-01-06 04:08:39
【问题描述】:
我正在使用 SQLite db 在 android 中创建一个多步骤表单。 我的问题是,我想更新用户名(主键)中的一列,但是数据库给了我两行和一个空值。
用户名 ---------------- 密码 -------------- 活动
我的用户名--------------mypass---------------------null
空---------------- 空---------- - 是的
用户名、密码、fname、lname、活动是我的“用户”表中的列。
SqliteHelper.java
public boolean saveUser(String fname, String lname, String username, String password) {
Cursor cursor = getUser(username);
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("fname", fname);
contentValues.put("lname", lname);
contentValues.put("password", password);
long result;
if (cursor.getCount() == 0) {
// added fname, lname, password
contentValues.put("username", username);
result = db.insert("users", null, contentValues);
} else {
result = db.update("users", contentValues, "fname=?", new String[] { fname });
result = db.update("users", contentValues, "lname=?", new String[] { lname });
result = db.update("users", contentValues, "username=?", new String[] { username });
result = db.update("users", contentValues, "password=?", new String[] { password });
}
if(result == -1) {
return false;
} else {
return true;
}
}
public long saveUser1(String active) {
Cursor cursor = getUser(active);
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("active", active);
long result;
if(cursor.getCount() == 0) {
result = db.insert("users", null, contentValues);
} else {
result = db.update("users", contentValues, "active=?", new String[] { active });
}
return db.update("users", contentValues, "active=?", new String[] { active });
}
public Cursor getUser(String username) {
SQLiteDatabase db = this.getReadableDatabase();
String sql = "SELECT * FROM users WHERE username=?";
return db.rawQuery(sql, new String[] { username });
}
MainActivity.java
public void save(View view) {
// added fname, lname, password
fname = ((EditText)findViewById(R.id.editText1)).getText().toString();
lname = ((EditText)findViewById(R.id.editText2)).getText().toString();
username = ((EditText)findViewById(R.id.editText3)).getText().toString();
password = ((EditText)findViewById(R.id.editText4)).getText().toString();
if (username.isEmpty()) {
Toast.makeText(getApplicationContext(), "Email cannot be empty!", Toast.LENGTH_LONG).show();
return;
}
boolean result = sqliteHelper.saveUser(fname, lname, username, password);
if (result) {
Toast.makeText(getApplicationContext(), "Successfully saved!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Failed to save!", Toast.LENGTH_LONG).show();
}
Intent intent = new Intent(MainActivity.this, Next.class);
startActivity(intent);
}
Next.java
public void save(View view) {
long result = sqliteHelper.saveUser1(active);
}
【问题讨论】:
-
建议尝试创建一个演示相同问题的最小示例。