Поскольку у вас есть класс Пользователь , вы можете извлечь все данные и вернуть пользователя.
Очевидно, что вам потребуется идентифицировать пользователя, который должен быть возвращен и позже обновлен.Как правило, вы должны хранить столбец id как длинный в классе User, хотя в этом нет необходимости, хотя ни один из других столбцов не определен с ограничением UNIQUE с использованием id * 1008.* столбец будет правильным способом избежать каких-либо неясностей.
Так что, если вы еще не определили члена класса для id , то было бы предложено сделать это, например, класс User (пример также используетдополнительные конструкторы): -
User.java
public class User {
private long id;
private String name;
private String email;
private String password;
public User() {
}
public User(String name, String email, String password) {
this(-1,name,email,password);
}
public User(long id, String name, String email, String password) {
this.id = id;
this.name = name;
this.email = email;
this.password = password;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Databasehelper.java (дополнительные методы)
Класс DatabaseHelper может иметь различные методы для извлечения объекта User, такие как: -
public User getUserByID(long id) {
User rv = new User();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.query(TABLE_USER,null,COLUMN_USER_ID + "=?",new String[]{String.valueOf(id)},null,null,null);
if (cursor.moveToFirst()) {
rv.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_USER_ID))); //<<<<<<<<<<optional
rv.setName(cursor.getString(cursor.getColumnIndex(COLUMN_USER_NAME)));
rv.setEmail(cursor.getString(cursor.getColumnIndex(COLUMN_USER_EMAIL)));
rv.setPassword(cursor.getString(cursor.getColumnIndex(COLUMN_USER_PASSWORD)));
}
cursor.close();
db.close();
return rv;
}
public User getUserByName(String name) {
User rv = new User();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.query(TABLE_USER,null,COLUMN_USER_NAME + "=?",new String[]{name},null,null,null);
if (cursor.moveToFirst()) {
rv.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_USER_ID))); //<<<<<<<<<<optional
rv.setName(cursor.getString(cursor.getColumnIndex(COLUMN_USER_NAME)));
rv.setEmail(cursor.getString(cursor.getColumnIndex(COLUMN_USER_EMAIL)));
rv.setPassword(cursor.getString(cursor.getColumnIndex(COLUMN_USER_PASSWORD)));
}
cursor.close();
db.close();
return rv;
}
public User getUserByEmail(String email) {
User rv = new User();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.query(TABLE_USER,null,COLUMN_USER_EMAIL + "=?",new String[]{email},null,null,null);
if (cursor.moveToFirst()) {
rv.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_USER_ID))); //<<<<<<<<<<optional
rv.setName(cursor.getString(cursor.getColumnIndex(COLUMN_USER_NAME)));
rv.setEmail(cursor.getString(cursor.getColumnIndex(COLUMN_USER_EMAIL)));
rv.setPassword(cursor.getString(cursor.getColumnIndex(COLUMN_USER_PASSWORD)));
}
cursor.close();
db.close();
return rv;
}
- Обратите внимание, что getUserById является предпочтительным методом, поскольку не может быть двусмысленностей.
Как id определенно не является двусмысленным, вы можете пересмотреть checkUser , чтобы он не только проверял пользователя, НО также возвращал id проверенного пользователя.Следовательно, этот метод также был добавлен: -
public long checkUserGettingId(String email, String password) {
long rv = -1;
String[] columns = {
COLUMN_USER_ID
};
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.query(TABLE_USER,columns,COLUMN_USER_EMAIL + "=? AND " + COLUMN_USER_PASSWORD + "=?",new String[]{email,password},null,null, null);
if (cursor.moveToFirst()) {
rv = cursor.getLong(cursor.getColumnIndex(COLUMN_USER_ID));
}
cursor.close();
db.close();
return rv;
}
Наконец, у вас могут быть следующие методы для обновления, оба они основаны на обновлении объекта User: -
public int updateUserByID(User user, long id) {
int rv = 0;
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_USER_NAME,user.getName());
cv.put(COLUMN_USER_EMAIL,user.getEmail());
cv.put(COLUMN_USER_PASSWORD,user.getPassword());
rv = db.update(TABLE_USER,cv,COLUMN_USER_ID + "=?",new String[]{String.valueOf(id)});
db.close();
return rv;
}
public int updateUser(User user) {
return updateUserByID(user, user.getId());
}
- the subtle difference being that the first, as it uses an independent **id** could be a little more flexible.
Пример использования
Ниже приведен код (в данном случае в Activity), который использует многие из указанных выше методов.
Он
- изначально добавляет 2 пользователей.
- затем эффективно входит в систему, используя метод checkUserGettingID .
- Извлекает пользовательские данные с помощью метода getUserById, чтобы получить данные для вошедшего в систему пользователя как объект User (mCurrentUser).
- Выводит данные пользователя в журнал.
- Обновляет данные пользователя и снова извлекает данные, записывающие измененные данные.
- Извлекает данные пользователя (обновляются) через getUserByEMail и выводит данные в журнал.
- Извлекает пользовательские данные (обновленные) с помощью метода getUserByName и выводит данные в журнал.
- Извлекает данные 2-го пользователя vнапример, метод getUserByEmail и вывод данных в журнал.
- Извлекает несуществующие данные пользователя с помощью метода getUserByEmail ** и выводит данные (все значения равны нулю, кроме * 1072).* id , который равен 0 (не сгенерированный автоматически id , поскольку первым будет 1)) в журнал.Обратите внимание, что вы обычно проверяете, существует ли пользователь, проверяя наличие действительного идентификатора и / или нулевых значений.
Используемый код: -
public class MainActivity extends AppCompatActivity {
DatabaseHelper mDBHlpr;
User mCurrentUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBHlpr = new DatabaseHelper(this);
//Add 2 Users
mDBHlpr.addUser(new User("Fred","Fred@fredmail.com","password"));
mDBHlpr.addUser(new User("Alice","Alice@alicemail.com","1234567890"));
long userid = mDBHlpr.checkUserGettingId("Fred@fredmail.com","password");
if (userid > 0) {
mCurrentUser = mDBHlpr.getUserByID(userid); //<<<<<<<<<<< Get all the user info
logUserInfo(mCurrentUser);
//Update the user
mCurrentUser.setName("Bert");
mCurrentUser.setEmail("Bert@Bertmail.com");
mCurrentUser.setPassword("anewpassword");
mDBHlpr.updateUser(mCurrentUser);
mCurrentUser = mDBHlpr.getUserByID(mCurrentUser.getId());
logUserInfo(mCurrentUser);
// Update the user again
mCurrentUser.setName("Mary");
mCurrentUser.setEmail("Mary@marymail.com");
mCurrentUser.setPassword("mypasswordismary");
mDBHlpr.updateUserByID(mCurrentUser,userid);
// get by email
mCurrentUser = mDBHlpr.getUserByEmail("Mary@marymail.com");
logUserInfo(mCurrentUser);
// get by Name
mCurrentUser = mDBHlpr.getUserByName("Mary");
logUserInfo(mCurrentUser);
// get 2nd user
mCurrentUser = mDBHlpr.getUserByEmail("Alice@alicemail.com");
logUserInfo(mCurrentUser);
//Oooops
mCurrentUser = mDBHlpr.getUserByEmail("nobody@nobody@email.com");
logUserInfo(mCurrentUser);
}
}
private void logUserInfo(User user) {
Log.d("USERINFO",
"User ID is " + String.valueOf(user.getId()) +
" UserName = " + user.getName() +
" UserEmail = " + user.getEmail() +
" UserPassword = " + user.getPassword());
}
}
Результат
Приведенное выше при первом запуске (код предназначен для одноразового запуска) выдает: -
06-26 10:02:26.795 12054-12054/? D/USERINFO: User ID is 1 UserName = Fred UserEmail = Fred@fredmail.com UserPassword = password
06-26 10:02:26.801 12054-12054/? D/USERINFO: User ID is 1 UserName = Bert UserEmail = Bert@Bertmail.com UserPassword = anewpassword
06-26 10:02:26.807 12054-12054/? D/USERINFO: User ID is 1 UserName = Mary UserEmail = Mary@marymail.com UserPassword = mypasswordismary
06-26 10:02:26.808 12054-12054/? D/USERINFO: User ID is 1 UserName = Mary UserEmail = Mary@marymail.com UserPassword = mypasswordismary
06-26 10:02:26.811 12054-12054/? D/USERINFO: User ID is 2 UserName = Alice UserEmail = Alice@alicemail.com UserPassword = 1234567890
06-26 10:02:26.812 12054-12054/? D/USERINFO: User ID is 0 UserName = null UserEmail = null UserPassword = null