Android sqlite打开数据库崩溃

时间:2010-09-11 17:41:24

标签: android

我有两个类,我的主类和另一个用于处理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 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(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;
    }
}

2 个答案:

答案 0 :(得分:1)

你在主要的某处关闭了数据库吗?如果没有,请尝试关闭它。 :)

答案 1 :(得分:0)

在创建表格时尝试将id的类型从INT更改为INTEGER,我认为SQLite不会识别命令INT