android: ошибка при создании таблицы в sqlite?

-3

Я создал приложение в android, в котором выполняю операцию crud. В файле базы данных приложений был успешно создан, но ошибка при создании таблицы и следующий - это ошибка Logcat и класс адаптера базы данных.

Ошибка Logcat

01-17 13:03:59.139: E/SQLiteLog(1036): (1) table timerecordsnew1 has no column named note
01-17 13:03:59.309: E/SQLiteDatabase(1036): Error inserting note=asdfsdfadf
01-17 13:03:59.309: E/SQLiteDatabase(1036): android.database.sqlite.SQLiteException: table timerecordsnew1 has no column named note (code 1): , while compiling: INSERT INTO timerecordsnew1(note) VALUES (?)
01-17 13:03:59.309: E/SQLiteDatabase(1036):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)

Ниже приведен мой класс адаптера базы данных

public class TimeTrackerAdapter {

    private static final int DATABASE_VERSION = 4;
    private static final String DATABASE_NAME = "timetrackernew1.db";
    //Table
    private static final String TABLE_NAME = "timerecordsnew1";

    //Table Column Variable
    public static final String TIMERECORDS_COLUMN_ID = "id";
    public static final String TIMERECORDS_COLUMN_TIME = "time";
    public static final String TIMERECORDS_COLUMN_NOTE = "note";

    private TimeTrackerOpenHelper openHelper;
    private SQLiteDatabase sqlDb;

    //Database creation sql statement
    private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " +  
            TABLE_NAME + "(" + TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
            TIMERECORDS_COLUMN_TIME + " TEXT " + TIMERECORDS_COLUMN_NOTE + " TEXT);";

    public TimeTrackerAdapter(Context context) {
        openHelper = new TimeTrackerOpenHelper(context);
        sqlDb = openHelper.getWritableDatabase();
    }

    //to insert data into database
    public void saveRecords(String t, String n) {

        ContentValues contentValues = new ContentValues();
        contentValues.put(TIMERECORDS_COLUMN_NOTE,t);
        contentValues.put(TIMERECORDS_COLUMN_NOTE, n);

        sqlDb.insert(TABLE_NAME, null, contentValues);
    }
    //get fetch the all data
    public Cursor getAllRecords() {

        return sqlDb.rawQuery("select * from " + TABLE_NAME, null);

    }

    // inner class
    private class TimeTrackerOpenHelper extends SQLiteOpenHelper {

        public TimeTrackerOpenHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            System.out.println("create statement"+SQL_CREATE_ENTRIES);
            try
            {
                db.execSQL(SQL_CREATE_ENTRIES);

            }catch(SQLiteException sql)
            {
                sql.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            onCreate(db);
        }
    }

}

Пожалуйста, помогите мне решить эту ошибку.

Благодарю вас

Теги:

4 ответа

1

Вы пропустили запятую в своем SQL между двумя столбцами:

private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " +  
        TABLE_NAME + "(" + TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        TIMERECORDS_COLUMN_TIME + " TEXT **,%Comma goes here%** " + TIMERECORDS_COLUMN_NOTE + " TEXT);";
0

TIMERECORDS_COLUMN_TIME + " TEXT " == TIMERECORDS_COLUMN_TIME + " TEXT, "

Вы забыли "," char.

В следующий раз прочитайте исключения и просмотрите свой код более точно.

0

Вот:

        TIMERECORDS_COLUMN_TIME + " TEXT " + TIMERECORDS_COLUMN_NOTE + " TEXT);";

вы получаете "время TEXT note TEXT" без запятой, чтобы отделить их.

Sqlite не обнаруживает его как синтаксическую ошибку: он запускается как "нетипизированная" база данных, а затем добавляет поддержку сродства типа, но продолжает разрешать все виды нежелательной информации для спецификации типа столбца.

0

похоже, что вам не хватает запятой в create table DDL. (в столбце TIMERECORDS_COLUMN_TIME..

из:

   private static final String SQL_CREATE_ENTRIES = 
        "CREATE TABLE " + TABLE_NAME + "(" + 
           TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
           TIMERECORDS_COLUMN_TIME + " TEXT " + 
           TIMERECORDS_COLUMN_NOTE + " TEXT);";

в

   private static final String SQL_CREATE_ENTRIES = 
         "CREATE TABLE " + TABLE_NAME + "(" + 
            TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
            TIMERECORDS_COLUMN_TIME + " TEXT, " + 
            TIMERECORDS_COLUMN_NOTE + " TEXT);";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню