开发者

Android sqlite opening database crashes

I have two classes, my main class and another for handling sqlite. The problem I have is that it crashes when it gets to db.open() in the main class and I have no idea why.

main class:

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 class:

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(Contex开发者_运维百科t 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;
    }
}


Do you close the database somewhere in the main? If not, try to close it. :)


When you are creating the table try changing the type of id from INT to INTEGER, I don't think that SQLite recognizes the command INT.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜