Android为了让我们能够更加方便的的管理数据,专门提供了一个SQLiteOpenHelper类,它是一个抽象类,如果我们想要使用它,就需要创建一个自己帮助类去继承它,而且它有两个抽象的方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后可以在其中去实现创建、升级数据库的逻辑。
SQLiteOpenHelper中还有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库进行操作的对象,不同的是,当数据不可写入时(如磁盘已满)、getReadableDatabase()方法返回的对象将以只读方式去打开数据库,而getWritableDatabase()方法则将出现异常
下面是我封装的继承SQLiteOpenHelper的类:
public class SQLiteDBHelper extends SQLiteOpenHelper { public SQLiteDBHelper(Context context, final String dbName, final int dbVersion){ super(context, dbName, null, dbVersion); } //第一次创建数据库的时候,调用onCreate方法(只调用一次) @Override public void onCreate(SQLiteDatabase db) { } //数据库版本号升级变更会调用onUpgrade函数(可用来创建新的数据库) @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } /** * 添加,更新,删除数据 * @param database * @param sql */ public void operateData(SQLiteDatabase database, final String sql){ if(sql != null){ try { database.execSQL(sql); }catch (SQLException e){ Log.e("OperateData", "operateData: " + e.toString()); } } } /** * 查询数据 * @param database * @param sql */ public Cursor queryData(SQLiteDatabase database, final String sql){ Cursor cursor; if (sql != null){ try { cursor = database.rawQuery(sql, null); return cursor; }catch (SQLException e){ Log.e("QueryData", "queryData: "+ e.toString() ); } } return null; }
下面是SQLiteDBHelper的执行接口
public class SqlExecute { private final static String dbName = "user"; //数据库名称 private final static int db_version = 1; //版本号 private SQLiteDBHelper sqLiteDBHelper = null; private SQLiteDatabase database = null; private static SqlExecute sqlExecute = null; public static SqlExecute getInstance(){ if(sqlExecute == null){ sqlExecute = new SqlExecute(); } return sqlExecute; } /** * 创建数据库 * @param context */ public void inIntDB(Context context){ sqLiteDBHelper = new SQLiteDBHelper(context, dbName, db_version); try { database = sqLiteDBHelper.getWritableDatabase(); }catch (Exception e){ Log.e("SQLiteDatabase", e.toString()); } } /** * 增、删、改、创建数据表 * @param sql */ public void operateData(String sql){ sqLiteDBHelper.operateData(database, sql); } /** * 查询数据 * @param sql */ public Cursor queryData(String sql){ return sqLiteDBHelper.queryData(database, sql); } }