2013-12-06 4 views
0
**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()); 


---------- 

Я могу хранить данные и извлекать данные из базы данных, но при извлечении егоИзвлечение данных из SQLite базы данных в соответствии с Firstname

показывает все данные, которые ранее сохраненные но должен показывать только тот, который

i вставлен затем. В принципе, если пользователь входит в систему со своим именем пользователя, он должен показывать только

его профиль, но он отображает все записи в базе данных. Как я должен

отделить его в соответствии с именем или любой конкретной записью (как я полагаю, первичный ключ). Извините

для публикации такого глупого вопроса, но я совершенно не знаком с программированием и базой данных. Любой

help высоко ценится.

+0

@ bobby.dhillon Спасибо приятеля. Поскольку я новичок в программировании, этот код кажется слишком жестким для моего крошечного мозгового мозга, но тем не менее, ценит ваши усилия. Cool .. – San

ответ

1

In Profile_view.Java вы могли бы назвать метод передачи строки будет соответствовать:

String name = dbAdapter.getName(currentUser); 

Ваш скорректированный метод GetName должен выглядеть примерно так:

public String getName(String currentUser); 

Наконец, класс SQLiteDatabase метод запроса, который 're call определяется следующим образом:

query (String table, String [] columns, String select ион, String [] selectionArgs, String GroupBy, String, имеющая, 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(), возвращая все, что захотите. Вашего новый метод прибудет может быть:

public String getSomething(String currentUser, String columnToMatch); 
+0

Но г-н Беннет, этот метод является лишь одним из примеров нескольких методов, которые я реализовал в своем классе. У меня также есть getmailid(), getusername(), getdob() и т. Д. – San

+0

Спасибо, мистер Б, попробуй и вернись к тебе. Весьма признателен. – San

+0

Это вернет любые (может быть null) соответствия вашей определенной переменной currentUser. Поэтому тестирование курсора для null перед возвратом было бы разумным. –

1

Быстрое предложение Добавить идентификатор в качестве столбца первичного ключа в таблицу пользователей. Затем получите этот идентификатор после добавления новой записи и сохраните этот идентификатор в SharedPreferences, а затем, когда это потребуется, вы можете вытащить запись из таблицы пользователей, например, WHERE id = my_id_save. Вот пример http://www.androidhive.info/2012/01/android-login-and-registration-with-php-mysql-and-sqlite/

1

Вы извлекаете все строки для трех столбцов, указанных в columns массиве, потому что вы прошли null для пункта WHERE в вызове к query().

+0

Итак, вы предлагаете мне заменить нуль в методе запроса? – San

+0

Да, вы должны заменить «null», который является параметром для предложения WHERE. Вы должны получить пользователя, пароль и имя которого соответствуют тому, что было введено пользователем. – Emmanuel

1

Используйте предложение WHERE, после чего вы можете отфильтровать полученные результаты.

Могу ли я предложить вам взглянуть на cupboard, это сделает ваш код более удобочитаемым и упростит использование всей базы данных!

Смежные вопросы