2014-02-26 78 views
0

我覺得我差不多花時間在網絡上搜索可能的解決方案來解決我的問題。我成功地插入了一個學生和一個主題,但是當從兩個表中獲取數據時,它會導致程序崩潰並顯示錯誤「沒有這樣的列」。SQlite Android沒有這樣的表列students.studentId

請幫幫我。

創建表

private static final String CREATE_TABLE_SUBJECT = "CREATE TABLE " 
     + TABLE_SUBJECT + "(" + SUBJECT_ID + " INTEGER PRIMARY KEY," + SUBJECT_NAME 
     + " TEXT," + SUBJECT_SCHEDULE + " TEXT," + SUBJECT_FILELOCATION 
     + " TEXT" + ")"; 

private static final String CREATE_TABLE_STUDENT = "CREATE TABLE " 
     + TABLE_STUDENT + "(" + SUBJECT_ID + " INTEGER PRIMARY KEY," + STUDENT_NAME 
     + " TEXT" + ")"; 

private static final String CREATE_TABLE_FUSION = "CREATE TABLE " 
     + TABLE_FUSION + "(" + FUSION_ID + " INTEGER PRIMARY KEY," + SUBJECT_ID 
     + " INTEGER," + STUDENT_ID +" INTEGER" + ")"; 

我從兩個表

顯示數據查詢
public List<Student> getAllStudnetsBySubject(long id) { 
    List<Student> subject = new ArrayList<Student>(); 


    String selectQuery = "SELECT * FROM " + TABLE_STUDENT + " students, " 
      + TABLE_SUBJECT + " subjects, " + TABLE_FUSION + " fusions WHERE subjects." 
      + SUBJECT_ID + " = '" + id + "'" + " AND subjects." + SUBJECT_ID 
      + " = " + "fusions." + FUSION_ID + " AND students." + STUDENT_ID + " = " 
      + "fusions." + FUSION_ID; 



    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor c = db.rawQuery(selectQuery, null); 


    if (c.moveToFirst()) { 
     do { 
      Student s = new Student(); 
      s.setStudentId(c.getInt((c.getColumnIndex(STUDENT_ID)))); 
      s.setStudentName((c.getString(c.getColumnIndex(STUDENT_NAME)))); 
      subject.add(s); 


     } while (c.moveToNext()); 
    } 

    return subject; 
} 

logcat的錯誤

02-27 07:00:32.938: E/DatabaseHelper(20727): SELECT * FROM student students, subject subjects, fusion fusions WHERE subjects.subject_id = '1' AND subjects.subject_id = fusions.id AND students.student_id = fusions.id 
02-27 07:00:32.948: E/SQLiteLog(20727): (1) no such column: students.student_id 

回答

1

嗯,你沒加student_idstudent表:

private static final String CREATE_TABLE_STUDENT = "CREATE TABLE " 
     + TABLE_STUDENT + "(" + SUBJECT_ID + " INTEGER PRIMARY KEY," + STUDENT_NAME 
     + " TEXT" + ")"; 

你需要對其進行修改和添加:

private static final String CREATE_TABLE_STUDENT = "CREATE TABLE " 
     + TABLE_STUDENT + "(" + STUDENT_ID + " INTEGER PRIMARY KEY," + SUBJECT_ID + " INTEGER PRIMARY KEY," + STUDENT_NAME 
     + " TEXT" + ")"; 
+0

woooh ..謝謝。我應該對它進行校對 – user3358155

0

看起來就像你做了一個簡單的複製和粘貼錯誤。更改此:

private static final String CREATE_TABLE_STUDENT = "CREATE TABLE " 
    + TABLE_STUDENT + "(" + SUBJECT_ID + " INTEGER PRIMARY KEY," + STUDENT_NAME 
    + " TEXT" + ")"; 

要這樣:

private static final String CREATE_TABLE_STUDENT = "CREATE TABLE " 
    + TABLE_STUDENT + "(" + STUDENT_ID + " INTEGER PRIMARY KEY," + STUDENT_NAME 
    + " TEXT" + ")"; 

換句話說,只要改變SUBJECT_ID到student_id數據。

+0

謝謝..多麼蹩腳的錯誤 – user3358155

0

看起來像是在爲Student表編寫代碼時,您從Subject表複製代碼並對其進行修改,但是您忘記將Subject_ID列修改爲Student_ID。這就是爲什麼它給Student_ID不存在於Student表中的原因。使用下面的更新的代碼,

private static final String CREATE_TABLE_SUBJECT = "CREATE TABLE " + TABLE_SUBJECT + "(" 
     + SUBJECT_ID + " INTEGER PRIMARY KEY," 
     + SUBJECT_NAME + " TEXT," 
     + SUBJECT_SCHEDULE + " TEXT," 
     + SUBJECT_FILELOCATION + " TEXT" 
     + ")"; 

private static final String CREATE_TABLE_STUDENT = "CREATE TABLE " + TABLE_STUDENT + "(" 
     + STUDENT_ID + " INTEGER PRIMARY KEY," // Change here 
     + STUDENT_NAME + " TEXT" 
     + ")"; 

private static final String CREATE_TABLE_FUSION = "CREATE TABLE " + TABLE_FUSION + "(" 
     + FUSION_ID + " INTEGER PRIMARY KEY," 
     + SUBJECT_ID + " INTEGER," 
     + STUDENT_ID +" INTEGER" 
     + ")"; 
2
String EntryA =String.valueOf(db.getentry("Ravirrrr", "KEY_Team_Name")); 

更改爲

String EntryA =String.valueOf(db.getentry("Ravirrrr", "_Team_Name")); 

KEY_Team_Name是一個變量在你的sqlite的助手,其中包含列名"_Team_Name"值。你不想要字符串"KEY_Team_Name"

+0

KEY_Team_Name無法解析爲變量 – 2014-03-26 15:18:50

+0

是的,使用值'「_Team_Name」'或在你的sqlite助手中引用它,並使變量在那裏公開。 – laalto

+0

現在我即將得到另一個錯誤... – 2014-03-26 15:25:07