簡體   English   中英

SQLite,表,聯接

[英]SQLite, Tables, Joining

Android,實現SQLite

這些是我有的表:

http://postimg.org/image/jafsx39h7/

我有代碼:

public String getWorkoutNameInfo() {
    // TODO Auto-generated method stub

    String[] columns = new String[] { KEY_DATE_OF_WORKOUT,
            KEY_WORKOUT_NAME, KEY_DATE };           
    Cursor c = ourDatabase.query(TABLE_DATE_WORKOUT, columns, null, null,           
            null, null, null, null);                    
    String workoutName2 = "";               
    int iWorkoutID = c.getColumnIndex(KEY_WORKOUT_NAME);
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        workoutName2 = workoutName2 + c.getString(iWorkoutID);  

            }

        return workoutName2;

}

這將返回值為“ 2 1 2”的executionName2

現在,我需要在WorkoutTable中查找2的值,然后返回“ Back”並生成“ Back,Chest,Back”,這樣我就可以將其放到屏幕上而不是2 1 2了。

我知道我將使用JOIN語句嗎? 但是我沒有實現它的運氣。

我的表格編碼:

// WORKOUT TABLE - COLUMN NAMES
public static final String KEY_WORKOUT = "workout_id";
public static final String STRING_WORKOUT = "workout_name"; 


    // DATE OF WORKOUT TABLE - COLUMN NAMES
public static final String KEY_DATE_OF_WORKOUT = "date_of_workout_id";
public static final String KEY_DATE = "date_of_workout";
public static final String KEY_WORKOUT_NAME = "workout_id";

    //TABLE NAMES
private static final String TABLE_WORKOUT = "WorkoutTable";
private static final String TABLE_DATE_WORKOUT = "DateofWorkout";

這是我的嘗試:

public String test(String workoutSelectedNameInfo) {

    // TODO Auto-generated method stub
    String NAMEofWorkout = "";
    open();
    ourDatabase = ourhelper.getReadableDatabase();
    Cursor c = ourDatabase
            .rawQuery(
                    "SELECT * FROM WorkoutTable LEFT JOIN DateofWorkout ON (WorkoutTable.workout_id = DateofWorkout.workout_id)   WHERE workout_id = ?",
                    new String[] { "2" });



    int iDateofWorkoutsWorkoutId = c.getColumnIndex(KEY_WORKOUT_NAME);
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        NAMEofWorkout = NAMEofWorkout + c.getString(iDateofWorkoutsWorkoutId);
    }
    c.close();
    ourDatabase.close();
    System.out.println(NAMEofWorkout);
    return NAMEofWorkout;

}

但是,當它輸出“ NameofWorkout”(應該是胸部,背部,胸部)時,我什么也收不到,絕對是空白。

當我將數據輸入到計算機上的SQLite實例中並執行查詢時,出現以下錯誤:

錯誤:列名稱不明確:executive_id

在查詢中,將WHERE workout_id更改為WHERE DateofWorkout.workout_id可使錯誤消失。

發生此問題的原因是結果中有兩列名為workout_id列,並且您必須消除后續引用的歧義。 因此,您可能還必須更改

c.getColumnIndex(KEY_WORKOUT_NAME)

c.getColumnIndex(TABLE_DATE_WORKOUT + "." + KEY_WORKOUT_NAME)

當您稍后使用結果時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM