0

我正在创建一个 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?

谢谢。

4

1 回答 1

1

根据 Logcat 的说法,我认为您必须删除数据库(可能是通过卸载您的应用程序),然后尝试运行该应用程序。这将重新创建您的数据库。一种可能性是您已经创建了表并且select某个地方失败了,因为该_id列从未创建过。

于 2013-07-06T21:03:39.687 回答