【发布时间】:2018-03-05 21:19:08
【问题描述】:
在我的数据库中,我有两个表“classes”和“classes_sessions”,我创建了一个链接这两个表的外键。我正在尝试使用下面的查询从这些表中检索数据
代码
String selectQuery = "SELECT * FROM " +
TABLE_CLASSES +
" INNER JOIN " + TABLE_CLASSES_SECTIONS +
" ON " +
TABLE_CLASSES_SECTIONS + "." + COLUMN_CLASSES_SECTIONS_ID +
" = " + TABLE_CLASSES + "." + COLUMN_CLASSES_SECTIONS +
" WHERE " +
TABLE_CLASSES + "." + COLUMN_CLASSES_ID +
" = " + String.valueOf(id);
在下面的getAllSectionsByClassesID()方法中
public ArrayList<SectionsBean> getAllSectionsByClassesID(long id){
String selectQuery = "SELECT * FROM " +
TABLE_CLASSES +
" INNER JOIN " + TABLE_CLASSES_SECTIONS +
" ON " +
TABLE_CLASSES_SECTIONS + "." + COLUMN_CLASSES_SECTIONS_ID +
" = " + TABLE_CLASSES + "." + COLUMN_CLASSES_SECTIONS +
" WHERE " +
TABLE_CLASSES + "." + COLUMN_CLASSES_ID +
" = " + String.valueOf(id);
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<SectionsBean> sectionsBeanList = new ArrayList<SectionsBean>();
Cursor cursor = db.rawQuery(selectQuery,null);
Log.i("Query details", String.valueOf(cursor));
Log.d("DataDetails", DatabaseUtils.dumpCursorToString(cursor));
while (cursor.moveToNext()) {
ClassesBean classesBean = new ClassesBean();
classesBean.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_CLASSES_ID)));
classesBean.setClasses_name(cursor.getString(cursor.getColumnIndex(COLUMN_CLASSES_NAME)));
SectionsBean sectionsBean = new SectionsBean();
sectionsBean.setSectionsID(cursor.getLong(cursor.getColumnIndex(COLUMN_CLASSES_SECTIONS_ID)));
sectionsBean.setSections_name(cursor.getString(cursor.getColumnIndex(COLUMN_CLASSES_SECTIONS_NAME)));
sectionsBean.setClassesBean(classesBean);
sectionsBeanList.add(sectionsBean);
}
return sectionsBeanList;
}
但它不返回任何东西。我正在使用该行检查数据库Log.d("DataDetails", DatabaseUtils.dumpCursorToString(cursor));中游标返回的数据,结果为空白。两个表都有内容如下所示
数据库内容
类表
-05 22:06:23.728 31258-31310/com.example.demeainc.demea D/DataC: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@88a8264
0 {
classes_id=1
class_item_index=null
classes_name=jss1
classes_codename=null
classes_sections_id=null
classes_teachers=null
classes_students=null
}
1 {
classes_id=2
class_item_index=null
classes_name=villa
classes_codename=null
classes_sections_id=null
classes_teachers=null
classes_students=null
}
2 {
classes_id=3
class_item_index=null
classes_name=two
classes_codename=null
classes_sections_id=null
classes_teachers=null
classes_students=null
}
<<<<<
会话表的数据库内容
03-05 22:09:03.943 31258-31258/com.example.demeainc.demea D/DataS: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@eaadf23
0 {
classes_sections_ids=1
classes_sections_name=cooolanet
classes_sections_description=bbdbn
}
1 {
classes_sections_ids=2
classes_sections_name=morrals
classes_sections_description=mills
}
2 {
classes_sections_ids=3
classes_sections_name=live
classes_sections_description=bxn
}
3 {
classes_sections_ids=4
classes_sections_name=testing2
classes_sections_description=coll
}
4 {
classes_sections_ids=5
classes_sections_name=tool
classes_sections_description=vi
}
5 {
classes_sections_ids=6
classes_sections_name=colls
classes_sections_description=
}
6 {
classes_sections_ids=7
classes_sections_name=more
classes_sections_description=coll
}
7 {
classes_sections_ids=8
classes_sections_name=testing
classes_sections_description=ttt
}
8 {
classes_sections_ids=9
classes_sections_name=threevill
classes_sections_description=cool
}
<<<<<
有关表创建的更多详细信息。
// create classes_table sql query
private String CREATE_CLASSES_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_CLASSES + "("
+ COLUMN_CLASSES_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_CLASS_ITEM_INDEX + " NUMBER,"
+ COLUMN_CLASSES_NAME + " VARCHAR," + COLUMN_CLASSES_CODENAME + " VARCHAR, " + COLUMN_CLASSES_SECTIONS + " INTEGER," + COLUMN_CLASSES_TEACHERS
+ " VARCHAR," + COLUMN_CLASSES_STUDENTS + " VARCHAR,"
+ "FOREIGN KEY(" + COLUMN_CLASSES_SECTIONS + ") REFERENCES " + TABLE_CLASSES_SECTIONS + "(" + COLUMN_CLASSES_SECTIONS_ID + ") ON DELETE CASCADE " + ");";
//create sections sql query
private String CREATE_CLASSES_SECTIONS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_CLASSES_SECTIONS + "("
+ COLUMN_CLASSES_SECTIONS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_CLASSES_SECTIONS_NAME + " VARCHAR,"
+ COLUMN_CLASSES_SECTIONS_DESCRIPTION + " VARCHAR" + ")";
可能是什么问题。外键实际上是链接两个表。我在上面的代码中有什么问题。
【问题讨论】:
标签: java android sqlite foreign-keys