как извлечь данные из sqlite - PullRequest
0 голосов
/ 25 июня 2019

Я хочу загрузить данные с момента, когда пользователь создал учетную запись, я не уверен, как это сделать

в классе, где я хочу загрузить информацию из учетной записи, план показатьи, возможно, также обновить любую информацию, предоставленную пользователем

может кто-нибудь протянуть мне руку?

databasehelper


package com.example.tulio.appkolev.sql;


public class DatabaseHelper  extends SQLiteOpenHelper{

    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_NAME = "UserManager.db";

    private static final String TABLE_USER = "user";

    private static final String COLUMN_USER_ID = "user_id";
    private static final String COLUMN_USER_NAME = "user_name";
    private static final String COLUMN_USER_EMAIL = "user_email";
    private static final String COLUMN_USER_PASSWORD = "user_password";

    private String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER + "("
            + COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_USER_NAME + " TEXT,"
            + COLUMN_USER_EMAIL + " TEXT," + COLUMN_USER_PASSWORD + " TEXT" + ")";

    private String DROP_USER_TABLE = "DROP TABLE IF EXISTS " + TABLE_USER;

    public DatabaseHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(CREATE_USER_TABLE);
    }

    @Override
    public  void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL(DROP_USER_TABLE);
        onCreate(db);
    }

    public void addUser(User user){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_USER_NAME, user.getName());
        values.put(COLUMN_USER_EMAIL, user.getEmail());
        values.put(COLUMN_USER_PASSWORD, user.getPassword());

        db.insert(TABLE_USER, null, values);
        db.close();
    }

    public boolean checkUser(String email){
        String[] columns = {
                COLUMN_USER_ID
        };
        SQLiteDatabase db = this.getWritableDatabase();
        String selection = COLUMN_USER_EMAIL + " = ?";
        String[] selectionArgs = { email };

        Cursor cursor = db.query(TABLE_USER,
                columns,
                selection,
                selectionArgs,
                null,
                null,
                null);
        int cursorCount = cursor.getCount();
        cursor.close();
        db.close();

        if (cursorCount > 0){
            return true;
        }
        return false;
    }

    public boolean checkUser(String email, String password){
        String[] columns = {
                COLUMN_USER_ID
        };
        SQLiteDatabase db = this.getWritableDatabase();
        String selection = COLUMN_USER_EMAIL + " = ?" + " AND " + COLUMN_USER_PASSWORD + " =?";
        String[] selectionArgs = { email, password };

        Cursor cursor = db.query(TABLE_USER,
                columns,
                selection,
                selectionArgs,
                null,
                null,
                null);
        int cursorCount = cursor.getCount();
        cursor.close();
        db.close();

        if (cursorCount > 0){
            return true;
        }
        return false;
    }
}

Я ценю помощь, также я был быблагодарен, если кто-то может объяснить мне, как я могу изменить базу данных с локальной на онлайн

1 Ответ

0 голосов
/ 26 июня 2019

Поскольку у вас есть класс Пользователь , вы можете извлечь все данные и вернуть пользователя.

Очевидно, что вам потребуется идентифицировать пользователя, который должен быть возвращен и позже обновлен.Как правило, вы должны хранить столбец 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), который использует многие из указанных выше методов.

Он

  1. изначально добавляет 2 пользователей.
  2. затем эффективно входит в систему, используя метод checkUserGettingID .
  3. Извлекает пользовательские данные с помощью метода getUserById, чтобы получить данные для вошедшего в систему пользователя как объект User (mCurrentUser).
  4. Выводит данные пользователя в журнал.
  5. Обновляет данные пользователя и снова извлекает данные, записывающие измененные данные.
  6. Извлекает данные пользователя (обновляются) через getUserByEMail и выводит данные в журнал.
  7. Извлекает пользовательские данные (обновленные) с помощью метода getUserByName и выводит данные в журнал.
  8. Извлекает данные 2-го пользователя vнапример, метод getUserByEmail и вывод данных в журнал.
  9. Извлекает несуществующие данные пользователя с помощью метода 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...