2010-09-11 5 views
1

J'ai deux classes, ma classe principale et un autre pour la gestion sqlite. Le problème que j'ai est qu'il se bloque quand il arrive à db.open() dans la classe principale et je ne sais pas pourquoi.Android sqlite l'ouverture de la base de données se bloque

classe principale:

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 
    } 
} 

classe 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

pouvez-vous élaborer sur l'accident? est-ce un redémarrage du système, exception (si oui, quelle est la pile), etc. Pouvez-vous regarder les journaux ou quoi que ce soit –

+0

Im un nouveau développement android donc je ne sais pas comment obtenir les journaux ou stacktrace. – Woody

+0

Essayez d'ouvrir un terminal et écrivez-y: adb logcat –

Répondre

1

-vous fermer la base de données quelque part dans le principal? Sinon, essayez de le fermer. :)

0

Lorsque vous créez la table essayez de changer le type de id de INT à INTEGER, je ne pense pas que SQLite reconnaît la commande INT.

+1

Il le reconnaît réellement! Il considère tout type de données avec 'INT' comme étant' INTEGER'. http://www.sqlite.org/datatype3.html#affname – Miikka

Questions connexes