2010-09-11 2 views
1

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

главный класс:

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

Можете ли вы подробно остановиться на крахе? это системная перезагрузка, исключение (если это так, что такое stacktrace) и т. д. Можете ли вы посмотреть на какие-либо журналы или что-нибудь? –

+0

Im kinda new для разработки Android, поэтому я не уверен, как получить журналы или стек. – Woody

+0

Попробуйте открыть терминал и напишите там: adb logcat –

ответ

1

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

0

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

+1

Это действительно признает! Он рассматривает любой тип данных с 'INT' в нем как' INTEGER'. http://www.sqlite.org/datatype3.html#affname – Miikka

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