2013-07-06 7 views
0

Я создаю приложение для Android и использую базу данных с ним. Одна из таблиц я использую с ним семестр таблица, которая создается с помощью следующего оператора:Исключение Runtime при создании таблицы 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); 

В моей основной деятельности я стараюсь создать Cursor Адаптер, который ссылается на представление списка, используя данные из базы данных для заполнения элементов.

Вот часть моего метода 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 (по этому имени)? Если у меня есть несколько таблиц, могу ли я задать разные имена для своих первичных ключей или будет необходимо для каждого?

Спасибо.

+0

Как насчет добавления пробела после «EXISTS»? Подобно '" ... EXISTS "+ semesterTable ...' –

+0

ya я понял, что из ho .. – iamseiko

ответ

1

Согласно Logcat, я думаю, вам нужно удалить свою базу данных (возможно, удалив приложение), а затем попробуйте запустить приложение. Это воссоздает вашу базу данных. Одна из возможностей заключается в том, что у вас уже создана таблица, а select не работает, потому что столбец _id так и не был создан.

+0

Hell yes! это сработало! Я думаю, что теперь могу добавить утверждения DROP TABLE в мои методы onDestroy(). Благодарю. – iamseiko

+1

Да, вы должны добавить в свой код сообщение DROP TABLE. –