Как я могу получить данные из sqlite и внешнего ключа - PullRequest
0 голосов
/ 07 февраля 2020

Я застрял в проблеме с внешним ключом, так как обычно я могу получить данные, но не могу получить данные с помощью внешнего ключа.

DB.Helper

 public static final String TBL_NAME="users";
    public static final String COL_ID="id";
    public static final String COL_NAME="name";
    public static final String COL_PASS="password";
    public static final String COL_EMAIL="email";
    public static final String COL_PIC="picture";


 public static final String TABLE_NAME = "tasks";
    public static final String C_ID = "_id";
    public static final String TITLE = "title";
    public static final String TYPE = "type";
    public static final String DETAIL = "description";
    public static final String TIME = "time";
    public static final String DATE = "date";
    public static final String KEY_TODO_USER_ID_FK = "userId";



    public static final
    String TBL_QUERY="create table "+TBL_NAME+"("+COL_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COL_NAME+" text,"+COL_PASS+" text,"+COL_EMAIL+" text,"+COL_PIC+" blob)";



    public static final String Task_Query = "create table if not exists " + TABLE_NAME + " ( "
            + C_ID + " integer primary key autoincrement, "
            + TITLE + " text, "
            + DETAIL + " text, "
            + TYPE + " text, "
            + TIME + " text, "
            +  KEY_TODO_USER_ID_FK + " INTEGER REFERENCES " + TBL_NAME + ","
            + DATE + " text)";

ViewActivity

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + Constants.C_ID + "=" + id, null);
TextView title = (TextView) findViewById(R.id.title);
TextView detail = (TextView) findViewById(R.id.detail);
TextView notetype = (TextView) findViewById(R.id.note_type_ans);
TextView time = (TextView) findViewById(R.id.alertvalue);
TextView date = (TextView) findViewById(R.id.datevalue);
if (cursor != null) {
    if (cursor.moveToFirst()) {
        title.setText(cursor.getString(cursor.getColumnIndex(Constants.TITLE)));
        detail.setText(cursor.getString(cursor.getColumnIndex(Constants.DETAIL)));
        notetype.setText(cursor.getString(cursor.getColumnIndex(Constants.TYPE)));
        time.setText(cursor.getString(cursor.getColumnIndex(Constants.TIME)));
        date.setText(cursor.getString(cursor.getColumnIndex(Constants.DATE)));

    }
    cursor.close();
}

Поэтому, пожалуйста, помогите мне, как я могу просмотреть только пользовательские задачи, а не все пользовательские задачи.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Столбец Constants.C_ID, равный _id, представляет собой первичный ключ целочисленного автоматического увеличения таблицы Constants.TABLE_NAME (tasks). Ваш запрос использует его для возврата 1 строки, которая соответствует id, который вы используете здесь в качестве параметра:

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + Constants.C_ID + "=" + id, null);

Если вы хотите вернуть задачу пользователя, используя идентификатор пользователя, то вам следует это сделать. например:

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + KEY_TODO_USER_ID_FK  + "=" + userId, null);

или даже лучше:

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + KEY_TODO_USER_ID_FK  + "= ?", new String[] {String.valueOf(userId)});

где userId - это идентификатор пользователя, которому вы хотите результаты. Этот запрос вернет 1 или более строк для этого userId.

0 голосов
/ 07 февраля 2020

Ну, чтобы получить данные только для определенного пользователя c, вам нужно включить это в ваш запрос. Итак, это:

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + Constants.C_ID + "=" + id, null);

Должно выглядеть примерно так:

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + Constants.C_ID + "=" + id + " and " + Constants.KEY_TODO_USER_ID_FK + "=" + userid, null);

Но я не знаю, где вы получите значение для переменной 'userid'.

...