Java 如何在SQLite中保存和检索特定行中的数据?
我正在制作一个应用程序,用户可以登录到他的帐户,通过Java 如何在SQLite中保存和检索特定行中的数据?,java,android,sqlite,Java,Android,Sqlite,我正在制作一个应用程序,用户可以登录到他的帐户,通过EditText中的内容,然后它将显示在TextView中。我的目的是保存并显示每个用户自己的文本。这是我到目前为止得到的 public class DatabaseHelper extends SQLiteOpenHelper { // Database Version private static final int DATABASE_VERSION = 3; // Database Name privat
EditText
中的内容,然后它将显示在TextView
中。我的目的是保存并显示每个用户自己的文本。这是我到目前为止得到的
public class DatabaseHelper extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 3;
// Database Name
private static final String DATABASE_NAME = "UserManager.db";
// User table name
private static final String TABLE_USER = "user";
// User Table Columns names
private static final String COLUMN_USER_ID = "userid";
private static final String COLUMN_USER_NAME = "user_name";
private static final String COLUMN_USER_PASSWORD = "user_password";
private static final String COLUMN_USER_HOURS = "user_hours";
// create table sql query
private String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER + "("
+ COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_USER_NAME + " TEXT,"
+ COLUMN_USER_PASSWORD + " TEXT," + COLUMN_USER_HOURS + " TEXT" + ")";
// drop table sql query
private String DROP_USER_TABLE = "DROP TABLE IF EXISTS " + TABLE_USER;
SQLiteDatabase db;
/**
* Constructor
*
* @param context
*/
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 3);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
this.db = sqLiteDatabase;
db.execSQL(CREATE_USER_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Drop User Table if exist
db.execSQL(DROP_USER_TABLE);
// Create tables again
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_PASSWORD, user.getPassword());
// Inserting Row
db.insert(TABLE_USER, null, values);
db.close();
}
public boolean checkUser(String name, String password) {
// array of columns to fetch
String[] columns = {
COLUMN_USER_ID
};
SQLiteDatabase db = this.getReadableDatabase();
// selection criteria
String selection = COLUMN_USER_NAME + " = ?" + " AND " + COLUMN_USER_PASSWORD + " = ?";
// selection arguments
String[] selectionArgs = {name, password};
Cursor cursor = db.query(TABLE_USER, //Table to query
columns, //columns to return
selection, //columns for the WHERE clause
selectionArgs, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
null); //The sort order
int cursorCount = cursor.getCount();
cursor.close();
db.close();
if (cursorCount > 0) {
return true;
}
return false;
}
public void updateData(UserData userData) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_USER_HOURS, userData.getHours() );
// updating row
db.update(TABLE_USER, values, COLUMN_USER_HOURS + " = ?",
new String[]{String.valueOf(userData.getHours())});
db.close();
}
我希望存储用户的EditText值,并从列列\u user\u HOUR
中检索。遗憾的是,我不知道如何一起设置它
,我假设应该为每个用户的id标识列\u USER\u HOUR
。谢谢帮助;)
这是用户数据
public class UserData {
private String hours;
public String getHours(){
return hours;
}
public void setHours(String hours){
this.hours = hours;}
}
您可以将
upDateData
方法更改如下:-
public int updateData(long userid, UserData userData) {
int rv;
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_USER_HOURS, userData.getHours() );
// updating row
rv = db.update(TABLE_USER, values, COLUMN_USER_ID + " = ?",
new String[]{Long.toString(userid)});
db.close();
return rv;
}
因此,如果您传递用户ID以及要更改的数据,该方法将返回所做更新的次数(如果有效,则返回1;如果未更新,则返回0)
答复:-
我知道这一点,但现在我只想知道如何存钱和存钱 检索唯一用户的数据(当用户登录到其帐户时,我希望 在文本视图中显示他通过edittext在数据中存储的内容)i 我知道这听起来很奇怪,但我想知道怎么做 数据结构:) 类似的更改,而不是返回布尔值,返回用户ID(如果失败,则返回0),例如:- 您可以使用
getHours
方法,如:-
public String getHours(long id) {
String rv = "";
SQLiteDatabase db = this.getWriteableDatabase();
Cursor cursor = db.query(TABLE_USER,
null,
COLUMN_USER_ID = "+?",
new String[]{Long.toString(id)},
null,null,null
);
if (cursor.moveToFirst()) {
rv = cursor.getString(cursor.getColumnIndex(COLUMN_USER_HOURS));
}
cursor.close();
db.close();
return rv;
}
您的活动可以包括以下内容:-
DatabaseHelper dbhlpr = new DatabaseHelper(this);
long current_userid = dbhlpr.checkUser(
username_EditText.getText().toString(),
userpassword_EditText.gettext.toString());
if (current_userid > 0) {
hours_TextView.settext(dbhlpr.getHours(current_userid));
} else {
//.... handle invalid login attempt here.
}
查看官方文件室库,省去编写所有SQLiteOpenHelper代码的麻烦。我有点困惑,但我想我会处理这个:),现在我想知道如何将用户数据检索到他的UserActivity
TextView
,这取决于您可以获取用户ID的UserData类,即UserData.getId()
如果getter存在并被调用,则返回long。如果您知道用户名是unqiue,可以使用它,例如newstring[]{userData.getUserName()})代码>,如果getter存在,请再次输入。目前,我的UserData在我的问题中是这样的(我添加了它),我知道用户名是唯一的。您尝试的问题是,您基本上是说更新小时数为10(或小时数的任何值)的行,并将其更改为10小时。我知道,但现在我只想知道如何为唯一的用户保存和检索数据(当用户登录到他的帐户时,我想在textview中显示他通过edittext在数据中存储的内容),我知道这听起来很奇怪,但我正试着理解如何构造数据:)
DatabaseHelper dbhlpr = new DatabaseHelper(this);
long current_userid = dbhlpr.checkUser(
username_EditText.getText().toString(),
userpassword_EditText.gettext.toString());
if (current_userid > 0) {
hours_TextView.settext(dbhlpr.getHours(current_userid));
} else {
//.... handle invalid login attempt here.
}