Сбой при открытии базы данных Android sqlite

1

У меня есть два класса, мой основной класс и другой для обработки sqlite. Проблема в том, что она падает, когда она попадает в db.open() в основном классе, и я понятия не имею, почему.

основной класс:

public class RingerSchedule extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        
        DBAdapter db = new DBAdapter(this);
        db.open(); //crash!
        //more stuff
    }
}

класс sqlite:

public class DBAdapter
{
    public static final String KEY_ROWID = "id";
    public static final String KEY_TO = "to";
    public static final String KEY_FROM = "from";
    public static final String KEY_DAY = "day";    
    public static final String KEY_FUNCTION = "function";    
    private static final String TAG = "DBAdapter";

    private static final String DATABASE_NAME = "myDB";
    private static final String DATABASE_TABLE = "schedules";
    private static final int DATABASE_VERSION = 1;

    private final Context context; 

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context); 
    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL("CREATE TABLE "
                + DATABASE_TABLE
                + " (id INT PRIMARY KEY AUTOINCREMENT, to TEXT,"
                + " from TEXT, day TEXT"
                + " function TEXT);"); 
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS titles");
            onCreate(db);
        }
    }    

    //opens the database
    public DBAdapter open() throws SQLException 
    {
        this.db = DBHelper.getWritableDatabase();
        return this;
    }

    //closes the database
    public void close() 
    {
        DBHelper.close();
    }

    //insert a schedule into the database
    public long insertSchedule(String from, String to, String day, String function) 
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_TO, to);
        initialValues.put(KEY_FROM, from);
        initialValues.put(KEY_DAY, day);
        initialValues.put(KEY_FUNCTION, function);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //deletes a particular schedule
    public boolean deleteSchedule(long Id) 
    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + Id, null) > 0;
    }

    //retrieves all the schedules
    public Cursor getAllSchedules() 
    {
        return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TO, KEY_FROM, KEY_DAY, KEY_FUNCTION}, null, null, null, null, null, null);
    }

    //updates a schedule
    public boolean updateSchedule(long Id, String to, String from, String day, String function) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_TO, to);
        args.put(KEY_FROM, from);
        args.put(KEY_DAY, day);
        args.put(KEY_FUNCTION, function);
        return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + Id, null) > 0;
    }
}
  • 0
    Можете ли вы рассказать о катастрофе? это перезагрузка системы, исключение (если так, что такое трассировка стека) и т. д. Можете ли вы посмотреть какие-либо журналы или что-нибудь
  • 0
    Где в вашем классе DBAdapter происходит сбой?
Показать ещё 3 комментария
Теги:

2 ответа

1

Вы закрываете базу данных где-то в главном? Если нет, попробуйте закрыть его.:)

0

Когда вы создаете таблицу, попробуйте изменить тип id с INT на INTEGER, я не думаю, что SQLite распознает команду INT.

  • 1
    Это действительно признает это! Он считает любой тип данных с INT в нем INTEGER . sqlite.org/datatype3.html#affname

Ещё вопросы

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