根据Firstname从SQLite数据库中检索数据

时间:2013-12-06 14:40:45

标签: android database sqlite

    **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());


----------
  

我能够存储数据并从数据库中检索数据,但是在检索数据时

显示以前存储的所有数据,但它应该只显示

然后我插入了。基本上,如果用户使用他的用户名登录,则应该只显示

他的个人资料详细信息,但它显示了数据库中的所有条目。我该怎么做

根据名字或任何特定条目(我相信的主键)对其进行隔离。对不起

发布这样一个愚蠢的问题,但我对编程和数据库完全不熟悉。任何

帮助非常感谢。

4 个答案:

答案 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);