gpt4 book ai didi

android - SQLite 查询在尝试更新行时返回 NULL 值

转载 作者:行者123 更新时间:2023-11-30 05:08:47 33 4
gpt4 key购买 nike

我正在使用 SQLite 数据库在 android 中创建一个多步骤表单。我的问题是,我想更新用户名(主键)中的一列,但数据库给了我两行和一个空值。

用户名----------------密码------------激活
我的用户名-------------我的密码---------------------null
空------------------------空-------------------- - 是的

username, password, fname, lname, active 是我在“用户”表中的列。

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);

}

最佳答案

在您的 Next.java 类中,您在 saveUser1() 方法中传递了 active,我猜这是一个 bool 字符串。该方法将 active bool 字符串作为 username 传递,以检查该用户(用户名为“yes”/“no”)是否已经存在,这是错误的。

您的 saveUser1() 方法实现也不正确。您将所有数据库操作结果放入 result 值中,但从未返回它。

编辑:

public long  saveUser1(String username, String active) {
Cursor cursor = getUser(username);
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, "username=?", new String[] { username });
}
return result;
}

关于android - SQLite 查询在尝试更新行时返回 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055453/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com