2013-07-06 40 views
0

我正在創建一個android應用程序,並使用它的數據庫。一個我與它使用的表是一個學期的表,它是使用以下語句創建的:運行時異常創建SQLite表

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?

謝謝。

+0

如何在「EXISTS」之後添加空格?像'「... EXISTS」+學期表...' –

+0

你我想出來了.. – iamseiko

回答

1

根據Logcat,我認爲你必須刪除你的數據庫(可能是通過卸載你的應用程序),然後嘗試運行應用程序。這將重新創建您的數據庫。一種可能性是你已經創建了表,並且select某處失敗,因爲從未創建_id列。

+0

地獄是!工作!我想我現在可以在我的onDestroy()方法中添加DROP TABLE語句。謝謝。 – iamseiko

+1

是的,您必須在您的代碼中添加DROP TABLE STATEMENT。 –