java - 获取 SQLite android 的特定行

标签 java android database sqlite

我是 Android 新手,我希望用户通过电子邮件和密码登录。通过电子邮件将其余信息(例如名字和出生日期)提供给用户。有什么办法可以做到吗?

“是否有一个功能我可以添加,通过电子邮件登录后无法带出所有用户信息”

这是我的数据库代码:

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_FIRST_NAME = "user_first_name";
private static final String COLUMN_USER_LAST_NAME = "user_last_name";
private static final String COLUMN_USER_EMAIL = "user_email";
private static final String COLUMN_USER_PHONE_NUMBER = "user_phone_number";
private static final String COLUMN_USER_BARTH_DAY = "user_barth_day";
private static final String COLUMN_USER_PASSWORD = "user_password";
private static final String COLUMN_USER_GENDER = "user_gender";

private String CREATE_USER_TABLE = "CREATE TABLE "+TABLE_USER + "("+
        COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"+
        COLUMN_USER_FIRST_NAME + " TEXT,"+ COLUMN_USER_LAST_NAME + " TEXT,"+
        COLUMN_USER_EMAIL + " TEXT PRIMARY KEY,"+COLUMN_USER_PHONE_NUMBER + " TEXT,"+
        COLUMN_USER_BARTH_DAY+" TEXT,"+ COLUMN_USER_PASSWORD+" TEXT," +
        COLUMN_USER_GENDER+" 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 database = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(COLUMN_USER_FIRST_NAME , user.getFirstName());
    values.put(COLUMN_USER_LAST_NAME , user.getLastName());
    values.put(COLUMN_USER_EMAIL , user.getEmail());
    values.put(COLUMN_USER_PHONE_NUMBER , user.getPhoneNumber());
    values.put(COLUMN_USER_BARTH_DAY , user.getBarthDay());
    values.put(COLUMN_USER_PASSWORD , user.getPassword());
    values.put(COLUMN_USER_GENDER , user.getGender());

    database.insert(TABLE_USER , null, values);
    database.close();
}
public boolean checkUser (String email){
    String [] columns = {
            COLUMN_USER_ID
    };
    SQLiteDatabase database = this.getWritableDatabase();
    String selection = COLUMN_USER_EMAIL + " = ?";
    String[] selectionArgs = {email};

    Cursor cursor = database.query(TABLE_USER,
            columns,selection , selectionArgs,null,null,null);

    int cursorCount = cursor.getCount();
    cursor.close();
    database.close();

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

}

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

    Cursor cursor = database.query(TABLE_USER,
            columns,selection , selectionArgs,null,null,null);

    int cursorCount = cursor.getCount();
    cursor.close();
    database.close();

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

}

}

最佳答案

对于您的第一个问题,您可以添加以下函数并使用它。

public User getSingleUserInfo(String email){

    SQLiteDatabase database = this.getWritableDatabase();
    Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_USER + " WHERE " + COLUMN_USER_EMAIL + "=" + email);
    cursor.moveToFirst();

    //setting related user info in User Object
    User user = new User();
    user.setUserId(cursor.getInt(cursor.getColumnIndexCOLUMN_USER_ID ));
    user.setFirstName(cursor.getString(cursor.getColumnIndex(COLUMN_USER_FIRST_NAME));
    user.setLastName(cursor.getString(cursor.getColumnIndex(COLUMN_USER_LAST_NAME ));
    user.setEmail(cursor.getString(cursor.getColumnIndex(COLUMN_USER_EMAIL ));
    user.setPhoneNumber(cursor.getString(cursor.getColumnIndex(COLUMN_USER_PHONE_NUMBER ));
    user.setBirthday(cursor.getString(cursor.getColumnIndex(COLUMN_USER_BARTH_DAY ));
    user.setPassword(cursor.getString(cursor.getColumnIndex(COLUMN_USER_PASSWORD));
    user.setGender(cursor.getString(cursor.getColumnIndex(COLUMN_USER_GENDER ));

    //close cursor & database
    cursor.close();
    database.close();

    return user;

}

Note : Becareful about your User object's setter functions which may be vary from my example and data types. Use c.getInt() if it is int and c.getString() if String.

关于java - 获取 SQLite android 的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53219223/

相关文章:

java - 搜索和排序时使用什么集合

java - 关于 JPA spec jar (javax.persistence.jar) 的问题

android - 自动重新设置首选项?

android - 带文本消息的笑脸将显示在 ListView 中

php - 使用时间戳或日期列类型将出生日期保存到 MYSQL DB

database - 使用 C#、sql、asp.net、exchange 在 SQL 中培训数据库设计

python - 将id值存储在字典中还是重新查询数据库是否更有效

java - SEAM 无状态 bean 未更新

java - 使用 File 创建包含句点的目录

android - 将图片添加到图库时出现 NullPointerException