SQL-запрос не создает мои столбцы? - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь создать фитнес-приложение, в котором база данных сохраняет имя пользователя и пароль.затем вводит их данные, которые сохраняются во второй таблице.Это мой dbHelper.

Ошибка, которую я получаю, заключается в том, что мой «столбец имени пользователя не существует». Но когда я иду и смотрю свои таблицы, используя db browser для sqlite, он показывает мои созданные таблицы и данные в моих таблицах

ОБНОВЛЕНИЕ: я создал 1 таблицу для хранения всех своих данных, и теперь она не поднимается, но я получаю «не установлено» из моего метода отображения

обновленная таблица

// Register table
public static final String COL_1 = "ID";
public static final String COL_2 = "Username";
public static final String COL_3 = "Password";
public static final String COL_4 = "Weight";
public static final String COL_5 = "Height";
public static final String COL_6 = "TargetWeight";
public static final String COL_7 = "TargetSteps";

метод отображения

 public String DisplayData(String username,String column)
{
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE Username =?",new String[]{username});
    if(cursor.moveToFirst()){
        return cursor.getString(cursor.getColumnIndexOrThrow(column));
    }else{
        return "Not set";
    }
}

Использование

public void setData() {
    db = new dbHelper(this);

    try {
        userWeight.setText(db.DisplayData(Username, dbHelper.COL_4));
        userHeight.setText(db.DisplayData(Username, dbHelper.COL_5));
        userTargetWeight.setText(db.DisplayData(Username, dbHelper.COL_6));
        userTargetSteps.setText(db.DisplayData(Username, dbHelper.COL_7));
    } catch (Exception e) {
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Ваша проблема, предполагая, что значение 2-го аргумента метода Displaydata равно Имя пользователя в том, что вы запрашиваете таблицу TABLE_NAME1 ( profile_data ), которая не имеетстолбец с именем Имя пользователя .

Вместо этого я считаю, что вы хотите запросить таблицу TABLE_NAME ( register_table таблица), поэтому измените: -

Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME1 +" WHERE Username = 'admin' ",null);

to: -

Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE Username = 'admin' ",null);

Дополнительный комментарий: -

Я больше не получаю сообщение об ошибке, но по-прежнему не отображается корректирующая информация.Я получаю «Не установлено» из моего метода displayData.from my if ELSE

Если вы добавили данные и получили вышеприведенное, то, вероятно, имя пользователя не соответствует строке в таблице.Попробуйте использовать следующую версию DisplayData для отладки: -

// Note changed to use recommended convenience query method
// Note closes cursor thus uses intermediate variable (rv) to allow close
public String DisplayData(String username,String column)
{
    String rv = "Not set";
    SQLiteDatabase db = this.getReadableDatabase();
    //Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE Username =?",new String[]{username}); //<<<<< replaced
    String whereclause = COL_2 + "=?";
    String[] whereargs = new String[]{username};
    Cursor cursor = db.query(TABLE_NAME,null,whereclause,whereargs,null,null,null);
    //<<<<<<<<<< FOLLOWING CODE ADDED TO LOG DEBUG INFO >>>>>>>>>>
    Log.d("DISPLAYDATAINFO","Display was called with Username as:- " +
            username +
            " for Column:- " +
            column +
            ". The Cursor contains " +
            String.valueOf(cursor.getCount()) +
            " ."
    );
    //<<<<<<<<<< END OF ADDED DEBUG CODE >>>>>>>>>>
    if(cursor.moveToFirst()){
        rv =  cursor.getString(cursor.getColumnIndexOrThrow(column));
    }
    cursor.close(); //<<<< SHOULD ALWAYS CLOSE CURSOR WHEN DONE WITH IT
    return rv;
}

Это должно привести к выводу в журнал по следующим строкам: -

05-18 23:08:25.429 2926-2926/fitness.fitness D/DISPLAYDATAINFO: Display was called with Username as:- Fred for Column:- Weight. The Cursor contains 5 .
    Display was called with Username as:- Fred for Column:- Height. The Cursor contains 5 .
    Display was called with Username as:- Fred for Column:- TargetWeight. The Cursor contains 5 .
    Display was called with Username as:- Fred for Column:- TargetSteps. The Cursor contains 5 .
  • Примечание 5, потому чтопри тестировании новые данные вставляются при каждом запуске, поэтому вышеприведенное указывает на 5-й запуск.

Или в случае, если ничего не найдено (ваша текущая проблема), что-то вроде : -

05-18 23:11:40.342 2926-2926/fitness.fitness D/DISPLAYDATAINFO: Display was called with Username as:- Tom for Column:- Weight. The Cursor contains 0 .
    Display was called with Username as:- Tom for Column:- Height. The Cursor contains 0 .
    Display was called with Username as:- Tom for Column:- TargetWeight. The Cursor contains 0 .
    Display was called with Username as:- Tom for Column:- TargetSteps. The Cursor contains 0 .
  • т.е. курсор содержит 0 = не существует строк для данного имени пользователя (в данном случае Tom).

  • Проверьте, соответствует ли имя пользователя ожидаемому (обратите внимание, что регистры букв должны совпадать, в приведенной выше строке существует строка для тома, но не для Тома, следовательно, счетчик равен 0).

  • Кажется, что поиск столбцов правильный, но все равно проверьте, что столбцы в выходных данных соответствуют ожидаемым (не вижу, что они не будут).
0 голосов
/ 18 мая 2018

TABLE_NAME1 не имеет столбца Username.обновите свой метод следующим образом

public String DisplayData(String username, String column) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE " + column + " = ? ", new String[]{username});
    if (cursor != null && cursor.moveToFirst()){
        return cursor.getString(cursor.getColumnIndexOrThrow(column));
    } else {
        return "Not set";
    }
}

и используйте его следующим образом

.DisplayData("admin", "Username");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...