我正在创建一个 android 应用程序,并使用它的数据库。我使用的其中一张表是学期表,它是使用以下语句创建的:
final String createSemesterTable =
"CREATE TABLE IF NOT EXISTS" + semesterTable +
"( " + _id + " INTEGER PRIMARY KEY AUTOINCREMENT," +
semesterName + " TEXT," +
isCurrent + " INTEGER," +
GPA + " REAL" + ");";
简单版:
CREATE TABLE IF NOT EXISTS Semesters(
_id INTEGER PRIMARY KEY AUTOINCREMENT,
semester_name TEXT,
is_current TEXT
GPA REAL);
在我的主要活动中,我尝试创建一个链接到列表视图的光标适配器,使用数据库中的数据来填充项目。
这是我的 onCreate(..) 方法的一部分:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
dbase = new DBHelper(getBaseContext());
sqldbase = dbase.getWritableDatabase();
ListView list = (ListView)findViewById(R.id.semesterList);
String columns[] = {DBHelper._id, DBHelper.semesterName, DBHelper.isCurrent, DBHelper.GPA};
String from[] = {DBHelper.semesterName, DBHelper.GPA};
int to[] = {R.id.semesterName, R.id.semesterGPA};
Cursor cursor = sqldbase.query(DBHelper.semesterTable, columns, null, null, null, null, null);
adap = new SimpleCursorAdapter(getBaseContext(),R.layout.semester_list_view,cursor, columns, to);
list.setAdapter(adap);
}
但是,当我编译/运行时,我收到以下消息:
07-06 20:34:25.950: E/AndroidRuntime(2825): java.lang.RuntimeException: Unable to start activity
android.database.sqlite.SQLiteException: no such column: _id (code 1): ,
while compiling: SELECT _id, Semester_Name, Is_Current, GPA FROM Semesters
我看不出有什么问题,因为我使用的是 _id 列(实际上是 SQLite 需要的)。另外,为什么需要 _id 列(按该名称)?如果我有多个表,是否可以为它们的主键设置不同的名称,或者每个表都需要 _id?
谢谢。