Как получить данные конкретного столбца и настроить его для редактирования текста в Android Studio - PullRequest
0 голосов
/ 23 июня 2019

Я новичок в базе данных. У меня есть две таблицы в базе данных одна пользовательская

"Create Table user(username text , contact_number text primary key , password text , favourite_fruit text"

и ключевые слова

"Create Table keywords( contact_number text primary key  , alarm text  , location text )"

Я хочу получить данные о тревоге столбца из ключевых слов и установить для них значение Изменить текст в действии, но я не могу получить данные из столбца тревоги. Пока я пробовал это:

public String getAlarm(String al){
        SQLiteDatabase db = this.getReadableDatabase(); 

        Cursor cursor=db.query("keywords",new String[]{"alarm"},"contact_number=?",new String[]{al},null,null,null,null);
        String a;
        if (cursor.moveToFirst()) {
            a = cursor.getString(cursor.getColumnIndex("alarm"));
        } else {
            a = " ";
        }
        return a;
}

и это:

 public String getAlarm(String al){
        SQLiteDatabase db = this.getReadableDatabase(); // to get database in readable format

     // Cursor cursor = db.rawQuery("select alarm from keywords where contact_number=? ",new String[]{al});
 String a;  //storing the required value
        if (cursor.moveToFirst())
        {
            do {
                a = cursor.getString(0);// each item will be stored
                return a;   // returning the required value
            }
            while(cursor.moveToNext());
        }

и это:

 public String getAlarm(String al){
        SQLiteDatabase db = this.getReadableDatabase(); // to get database in readable format

      Cursor cursor = db.rawQuery("select alarm from keywords where contact_number=? ",new String[]{al});
        if (cursor != null) {
            cursor.moveToFirst();
        }
        while (cursor.isAfterLast() == false) {
            cursor.getString(1); // will fetch you the data
            cursor.moveToNext();
        }

        cursor.close();
        return " ";
}

Файл моей базы данных выполняет каждый запрос пользовательской таблицы, но для таблицы ключевых слов он просто выполняет свою функцию insertkeys и никакой другой запрос относительно таблицы ключевых слов. Я не понимаю, связана ли проблема с моим запросом или с моей таблицей. мой файл базы данных тоже

public class DatabaseHelper extends SQLiteOpenHelper {

    // constructor
    public DatabaseHelper(Context context) {
        super(context, "Offline Mobile Finder.db", null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("Create Table user(username text , contact_number text primary key , password text , favourite_fruit text)");
        db.execSQL("Create Table keywords( contact_number text primary key  , alarm text  , location text )");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists user");
        db.execSQL("drop table if exists keywords");
        onCreate(db);
    }

    //  data of user table
    public boolean insert (String username,String contact_no ,String password ,String fav_fruit ){

        SQLiteDatabase db = this.getWritableDatabase();
        //ContentValues is a name value pair, used to insert or update values into database tables.
        // ContentValues object will be passed to SQLiteDataBase objects insert() and update() functions.
      //  ContentValues contentValues = new ContentValues();
        ContentValues contentValues = new ContentValues();
        contentValues.put("username",username);
        contentValues.put("contact_number",contact_no);
        contentValues.put("password",password);
        contentValues.put("favourite_fruit",fav_fruit);
        long ins = db.insert("user",null,contentValues);
        //  db.close();
        if(ins == -1)
            return  false;
        else
            return true;
    }

    // values insert in keywords table
    public boolean insertkeys (String alarm ,String location ,String contact){

        SQLiteDatabase db = this.getWritableDatabase();
        //ContentValues is a name value pair, used to insert or update values into database tables.
        // ContentValues object will be passed to SQLiteDataBase objects insert() and update() functions.
        //  ContentValues contentValues = new ContentValues();
        ContentValues contentValues = new ContentValues();

        contentValues.put("alarm",alarm);
        contentValues.put("location",location);
        contentValues.put("contact_number",contact);
        long ins = db.insert("keywords",null,contentValues);
        long upd = db.update("keywords",contentValues,"contact_number = ?",new String[]{contact});
        //  db.close();
        if(ins == -1 && upd == -1)
            return  false;
        else
            return true;
    }

    public String getAlarm(String al) {
        SQLiteDatabase db = this.getReadableDatabase(); // to get database in readable format

        Cursor cursor = db.rawQuery("select alarm from keywords where contact_number=? ", new String[]{al});
        String result = "";
        if (cursor.moveToFirst()) {
            result = cursor.getString(0);
        }
        cursor.close();
        return result;



    }

    // checking if contact number exists in register activity
    public boolean checkContactNo (String contact_no){

        SQLiteDatabase db = this.getReadableDatabase();

        //Cursors are what contain the result set of a query made against a database in Android.
        // The Cursor class has an API that allows an app to read (in a type-safe manner) the columns
        // that were returned from the query as well as iterate over the rows of the result set.

        Cursor cursor = db.rawQuery("Select * from user where contact_number=?", new String[] {contact_no} );
        if(cursor.getCount() > 0 )
            return false;
        else
            return true;
    }
  public String getUsernameThroughContactNo(String contactNo){
        SQLiteDatabase db = this.getReadableDatabase(); // to get database in readable format
        Cursor cursor = db.rawQuery("select username from user where contact_number=?",new String[]{contactNo});
        String a;   //storing the required value
        if (cursor.moveToFirst())
        {
            do {
                a = cursor.getString(0);// each item will be stored
                return a;   // returning the required value
               }
         while(cursor.moveToNext());
        }
        return "";
    }
}

Я пытаюсь показать значение getAlarm () в других действиях в toast, но при выполнении каждого запроса, который я пробовал, ничего не отображается в toast. Даже если я пытаюсь получить contact_number из этой таблицы, происходит сбой. Искал так много, чтобы решить проблему, но не нашел решения. Я надеюсь, что здесь кто-то найдет проблему и даст решение. Заранее спасибо за помощь:)

1 Ответ

0 голосов
/ 23 июня 2019

В вашей первой попытке, с этим:

a = cursor.getString(cursor.getColumnIndex("balance"));

вы пытаетесь получить значение столбца "balance" вместо "alarm".
Ваша вторая попытка выглядит хорошо, хотя вам не нужен цикл do, поскольку вы return после того, как получили первое значение.
В вашем 3d попробуйте ошибка:

cursor.getString(1);

Индекс 1 неверен, он должен быть 0, поскольку индексы столбцов основаны на 0.
Но проблема также в том, что вы нигде не сохраняете значение и, наконец, возвращаете " " !!! Почему?
Вы должны сделать что-то вроде:

public String getAlarm(String al){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("select alarm from keywords where contact_number=? ",new String[]{al});
    String result = "";
    if (cursor.moveToFirst()) {
        result = cursor.getString(0);
    }
    cursor.close();
    return result;
}
...