SQLite
想查找一下SQLiteQueryBuilder这个类的使用,结果发现这一篇文章,虽然没说明SQLiteQueryBuilder的用法,但是对基本的SQL数据库做了一个很清晰的说明,值得一读. 1.Android中通过SQLite数据库引擎来实现结构化数据存储。SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备,提供的是一种高效的数据库引擎。 Android中操作数据库首先要通过一个 类:android.database.sqlite.SQLiteOpenHelper。它封装了如何打开一个数据库,其中当然也包含如果数据库不存在 就创建这样的逻辑。看一个例子: pubilc class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "com.roiding.simple.note"; private static final int DATABASE_VERSION = 1; private static final String NOTES_TABLE_NAME = "notes"; DatabaseHelper(Context context) { super(context,DATABASE_NAME,null,DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + NOTES_TABLE_NAME + " (id integer primary key autoincrement,name text);"); } @Override public void onUpgrade(SQLiteDatabase db,int newVersion) { db.execSQL("DROP TABLE IF EXISTS notes"); onCreate(db); } } 这里面,如下的语句需要解释:
在Android中,数据库存放在 /data/data/PACKAGE_NAME/databases 目录下。 接下来就可以使用这个Helper来操作数据库了,操作数据库也就无非是增、删、改、查。先看一个增的例子: public static void insert(Context context,String s) { DatabaseHelper mOpenHelper = new DatabaseHelper(context); String table = "notes"; String nullColumnHack = "id"; ContentValues values = new ContentValues(); values.put("name","www.roiding.com"); long id = mOpenHelper.getReadableDatabase().insert(table,nullColumnHack,values); mOpenHelper.getReadableDatabase().close(); }
再看一个查的例子: public static void select(Context context) { DatabaseHelper mOpenHelper = new DatabaseHelper(context); String table = "notes"; String[] columns = new String[] { "id","name" }; String selection = "id>? and name<>?"; String[] selectionArgs = new String[] { "0","roiding.com" }; String groupBy = null; String having = null; String orderBy = "id desc"; String limit = "1"; Cursor c = mOpenHelper.getReadableDatabase().query(table,columns,selection,selectionArgs,groupBy,having,orderBy,limit); c.moveToFirst(); for (int i = 0; i < c.getCount(); i++) { String s = c.getString(1); c.moveToNext(); } c.close(); mOpenHelper.getReadableDatabase().close(); }
再看一个删除和修改的例子: public static void delete(Context context) { DatabaseHelper mOpenHelper = new DatabaseHelper(context); String table = "notes"; String selection = "id>? and name<>?"; String[] selectionArgs = new String[] { "0","roiding.com" }; String whereClause = selection; String[] whereArgs = selectionArgs; mOpenHelper.getWritableDatabase().delete(table,whereClause,whereArgs); mOpenHelper.getWritableDatabase().close(); } 有了上面的基础这里就容易理解了,这里的whereClause相当于前面的selection,whereArgs相当于前面的selectionArgs。 public static void update(Context context) { DatabaseHelper mOpenHelper = new DatabaseHelper(context); String table = "notes"; String selection = "id>? and name<>?"; String[] selectionArgs = new String[] { "0","roiding.com" }; String whereClause = selection; String[] whereArgs = selectionArgs; ContentValues values = new ContentValues(); values.put("name","www.roiding.com"); mOpenHelper.getWritableDatabase().update(table,values,whereArgs); mOpenHelper.getWritableDatabase().close(); } 这个update的用法,综合select和delete就可以理解。 注意:
在真实的应用中,会对上面这些基本操作做更高一级的抽象和封装,使之更容易使用。在select时,除了用上述的方法,将分段的SQL语句传进去之外,Android还支持一种方法:使用SQLiteQueryBuilder。如果使用的是上述的分段SQL语句的方法,在Android的内部实现中,也是先将分段的SQL使用SQLiteQueryBuilder的静态方法来生成一个真正的SQL的,而且,我没有看出来使用SQLiteQueryBuilder的优势。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |