Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 怎么能ı;从sqlite和外键检索数据_Java_Android_Sqlite_Foreign Keys_Android Sqlite - Fatal编程技术网

Java 怎么能ı;从sqlite和外键检索数据

Java 怎么能ı;从sqlite和外键检索数据,java,android,sqlite,foreign-keys,android-sqlite,Java,Android,Sqlite,Foreign Keys,Android Sqlite,我一直被外键问题困扰,因为通常我可以检索数据,但我不能用外键检索数据 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 stat

我一直被外键问题困扰,因为通常我可以检索数据,但我不能用外键检索数据

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)";
查看活动

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

因此,请帮助我如何仅查看用户任务而不是所有用户任务。

好吧,要仅检索特定用户的数据,您需要在查询中包含该数据。那么这个,

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);
Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + KEY_TODO_USER_ID_FK  + "=" + userId, null);

但是我不知道从哪里得到“userid”变量的值。

常量。C\u ID
\u ID
是表
常量的自动递增整数主键。表\u NAME
任务
)。
您的查询使用它返回一行,该行对应于您在此处用作参数的
id

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + Constants.C_ID + "=" + id, null);
如果要使用用户id返回用户的任务,则应如下操作:

Cursor cursor = sb.rawQuery("select * from " + Constants.TABLE_NAME + " where " + Constants.C_ID + "=" + id + " and " + Constants.KEY_TODO_USER_ID_FK + "=" + userid, 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
是希望获得结果的用户的id。

此查询将为该
用户标识返回1行或多行

,但ı不知道如何使put-extra-userId变量