创建SQLite表时的运行时异常

时间:2013-07-06 20:56:36

标签: android sqlite

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

在我的主要活动中,我尝试创建一个链接到列表视图的Cursor Adapter,使用数据库中的数据来填充项目。

这是我的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?

感谢。

1 个答案:

答案 0 :(得分:1)

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