**DBAdapter.java :**
public void onCreate(SQLiteDatabase db) {
db.execSQL(" CREATE TABLE " + DATABASE_TABLE + " (" + KEY_FIRSTNAME
+ " TEXT NOT NULL PRIMARY KEY, " + KEY_MIDDLENAME + " TEXT NOT NULL, "
+ KEY_LASTNAME + " TEXT NOT NULL, " + KEY_USERNAME + " TEXT NOT NULL, " + KEY_MAIL_ID + " TEXT NOT NULL, "
+ KEY_PASSWORD + " TEXT NOT NULL, " + KEY_CONFIRM
+ " TEXT NOT NULL, " + KEY_DATE_OF_BIRTH
+ " INTEGER NOT NULL "
+ ");");
}
public long insertRecord(String firstname, String middlename,
String lastname, String username, String mail_id, String pass_word,
String re_password, String d_o_b) {
ContentValues cv = new ContentValues();
cv.put(KEY_FIRSTNAME, firstname);
cv.put(KEY_MIDDLENAME, middlename);
cv.put(KEY_LASTNAME, lastname);
cv.put(KEY_USERNAME, username);
cv.put(KEY_MAIL_ID, mail_id);
cv.put(KEY_PASSWORD, pass_word);
cv.put(KEY_CONFIRM, re_password);
cv.put(KEY_DATE_OF_BIRTH, d_o_b);
//cv.put(KEY_COUNTRY, coun_try);
return mDB.insert(DATABASE_TABLE, null, cv);
}
public String getName() {
String column[] = new String[] { KEY_FIRSTNAME, KEY_MIDDLENAME,
KEY_LASTNAME };
Cursor c = mDB.query(DATABASE_TABLE, column, null, null, null, null,
null);
String name = "";
int iFirst = c.getColumnIndex(KEY_FIRSTNAME);
int iMiddle = c.getColumnIndex(KEY_MIDDLENAME);
int iLast = c.getColumnIndex(KEY_LASTNAME);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
name = name + c.getString(iFirst) + "\t" + c.getString(iMiddle)
+ "\t" + c.getString(iLast) + "\t";
}
c.close();
return name;
}
----------
**Profile_view.java :**
DBAdapter dbAdapter = new DBAdapter(Profile_view.this);
dbAdapter.open();
String name = dbAdapter.getName();
full_name.setText(name);
username_display.setText(dbAdapter.getUserName());
mail_display.setText(dbAdapter.getMail_id());
date_of_birth_display.setText(dbAdapter.get_date_of_birth());
----------
我能够存储数据并从数据库中检索数据,但是在检索数据时
显示以前存储的所有数据,但它应该只显示
然后我插入了。基本上,如果用户使用他的用户名登录,则应该只显示他的个人资料详细信息,但它显示了数据库中的所有条目。我该怎么做
根据名字或任何特定条目(我相信的主键)对其进行隔离。对不起
发布这样一个愚蠢的问题,但我对编程和数据库完全不熟悉。任何
帮助非常感谢。
答案 0 :(得分:1)
快速建议将id作为主键列添加到users表。然后在插入新记录后获取该id并将该id保存在SharedPreferences中,然后在需要时,您可以从用户表中提取记录,如使用WHERE id
= my_id_save。
以下是示例http://www.androidhive.info/2012/01/android-login-and-registration-with-php-mysql-and-sqlite/
答案 1 :(得分:1)
您正在检索columns
数组中指定的三列的所有行,因为您在null
的调用中为WHERE
子句传递了query()
。
答案 2 :(得分:1)
使用WHERE子句,然后可以过滤要检索的结果。
我建议您看一下cupboard,它会让您的代码更具可读性,并使整个数据库的使用更加简单!
答案 3 :(得分:1)
在Profile_view.java中,您将调用传递String的方法来匹配:
String name = dbAdapter.getName(currentUser);
您调整后的getName方法应如下所示:
public String getName(String currentUser);
最后,您调用的SQLiteDatabase类查询方法定义如下:
query(String table,String [] columns, String selection , String [] selectionArgs ,String groupBy,String having,String orderBy)
因此请将查询调用调整为:
Cursor c = mDB.query(DATABASE_TABLE, column, null, "where firstname = ?", new String[]{"" + currentUser + ""}, null, null);
让事情变得更有活力:
String where = "where " + columnToMatch + " = ?";
Cursor c = mDB.query(DATABASE_TABLE, column, null, where, new String[]{"" + stringToMatch + ""}, null, null);
这样你可以调用query()返回你想要的任何内容。 您的新get方法可能是:
public String getSomething(String currentUser, String columnToMatch);