2015-02-07 2 views
1

I мое приложение вылетает, когда я пытаюсь получить доступ к данным в моей базе данных. Я подозреваю, что я не правильно вставляю данные в базу данных, ниже приведены классы и методы, которые я использую.Ошибка Android SQLite: Вставка данных

public class MySQLiteHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "mydb.db"; 
    private static final int DATABASE_VERSION = 1; 

    public static final String TABLE_QUICK_STOP = "quick_stop"; 

    public static String[] QUICK_STOP_FIELDS = { 
     "_id", // autoincrement 
     "quick_stop_stop_id", // stop id 
     "quick_stop_name", 
     "quick_stop_types", // ex. 1111 or 0101. Underground Train Bus Ferry, used to filter some specific stations 
     "quick_stop_position" 
     //TODO should there be a "stop_name" here? 
    }; 

    private static final String DATABASE_CREATE = "create table " 
     + TABLE_QUICK_STOP + "(" 
     + QUICK_STOP_FIELDS[0] + " long primary key, " // id (same stop can be added multiple times with different filters) 
     + QUICK_STOP_FIELDS[1] + " integer not null, " // stop id 
     + QUICK_STOP_FIELDS[2] + " varchar not null, " // stop name 
     + QUICK_STOP_FIELDS[3] + " integer not null, " // stop types 
     + QUICK_STOP_FIELDS[4] + " integer not null);"; // stop position   array[4] = cursor.getInt(4); // stop position 

    public MySQLiteHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(MySQLiteHelper.class.getName(), 
       "Upgrading database from version " + oldVersion + " to " 
         + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUICK_STOP); 
     onCreate(db); 
    } 
} 

И я использую для вставки:

public Boolean insertStop(int stopId, String name, int types, int position) { 
    ContentValues values = new ContentValues(); 
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[1], stopId); 
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[2], name); 
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[3], types); 
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[4], position); 
    long insertId = database.insert(MySQLiteHelper.TABLE_QUICK_STOP, null, values); 
    if(insertId == -1) 
     return false; 
    return true; 
} 

Как указывалось выше, Android Студия ужасна на предоставление информации, чтобы иметь возможность отладки.

+0

Вы ** изменили ** структуру таблицы после первого запуска? Если это так, измените 'DATABASE_VERSION = 1;' на 'DATABASE_VERSION = 2;' или большее число, чтобы сделать 'onUpgrade()' fire. Или попробуйте удалить db из пути '/ data/data/... ', чтобы он был повторно создан при следующем запуске. –

+0

@DerGolem Я изменил имя базы данных, и это сработало, поэтому вы правильно указали в своем комментарии. Готовьте это как ответ, и я соглашусь! –

+0

Сделано! Иногда ошибки скрываются на виду ... –

ответ

1

Вы сделали изменить структуру стола после первого запуска?

Если это так, измените DATABASE_VERSION = 1; к DATABASE_VERSION = 2; или большее число, чтобы сделать onUpgrade() огонь.

Или, в качестве альтернативы, попробуйте удалить (или переименовать) db из пути /data/data/..., чтобы он мог быть воссоздан при следующем запуске.

Смежные вопросы