Android中封装了对SQLite3的数据库操作,下面记录一下如果使用数据库可能用到的东东~~~
Context中封装了打开创建数据库的方法,原函数定义如下:
一般使用MODE_PRIVATE打开,mDatabase = openOrCreateDatabase("DBTest.db", Context.MODE_PRIVATE, null);
打开数据库,一定要记得及时关闭!!!
由于没有数据库管理的图形界面,数据表一般都得由程序执行SQL语句生成,下面代码简单创建一个表,
使用Create TABLE IF NOT EXISTS Users,防止已经存在表时出错。。。
public void createDataTable() { // Create TABLE IF NOT EXISTS Users( // ID integer Primary Key AUTOINCREMENT, // UserName varchar(50) // ) try { mDatabase.execSQL("Create TABLE IF NOT EXISTS Users( " + "ID integer Primary Key AUTOINCREMENT, " + "UserName varchar(50) " + ")"); Log.e(TAG, "createDataTable OK!"); } catch (SQLException se) { Toast.makeText(this, se.getMessage(), Toast.LENGTH_LONG).show(); se.printStackTrace(); } }
插入记录:
public void insertRecord() { ContentValues values = new ContentValues(); values.put("UserName", "Yao.GUET"); try { for (int i=0; i<5; i++) { // mDatabase.execSQL("INSERT INTO USERS (UserName) VALUES(/"Yao.GUET/")"); mDatabase.insertOrThrow("Users", null, values); } Toast.makeText(this, "insert data OK!", Toast.LENGTH_LONG).show(); Log.e(TAG, "insert data OK!"); } catch (SQLException se) { Toast.makeText(this, se.getMessage(), Toast.LENGTH_LONG); se.printStackTrace(); } }
删除记录:
public void deleteRecord(String ID) { // mDatabase.execSQL("DELETE FROM Users WHERE ID="+ID); mDatabase.delete("Users", "ID=?", new String[]{ID}); loadRecord(); }
清空表,并把自动增长的ID置0,这个原来在SQL里面只用TRUNCATE TABLE就可以,
但是SQLite3并不支持TRUNCATE所以要分为两条语句执行。
public void cleanDatabase() { try { // mDatabase.execSQL("TRUNCATE TABLE Users"); mDatabase.execSQL("DELETE FROM Users"); mDatabase.execSQL("update sqlite_sequence set seq=0 where name=/"Users/""); } catch (SQLException se) { Toast.makeText(this, se.getMessage(), Toast.LENGTH_LONG).show(); se.printStackTrace(); } }
android里面有Cursor类来读取数据表记录的,但是有SQLiteDatabase提供的query方法比较的不人性,
一列一大堆参数,还不如直接使用SQL来得快,,,Cursor用完之后需要Close()否则会出现异常的~~~
public void loadRecord() { List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); Cursor cursor = mDatabase.rawQuery("SELECT * FROM USERS", null); if (cursor != null) { cursor.moveToFirst(); for (int i=0; i<cursor.getCount(); i++) { HashMap<String, String> map = new HashMap<String, String>(); map.put("ID", cursor.getString(0)); map.put("UserName", cursor.getString(1)); list.add(map); cursor.moveToNext(); } cursor.close(); lvData.setAdapter(new SimpleAdapter(this, list, android.R.layout.simple_expandable_list_item_2, new String[]{"ID","UserName"}, new int[]{android.R.id.text2, android.R.id.text1})); Toast.makeText(this, "Update OK!", Toast.LENGTH_LONG).show(); } }
呵呵,只是简单的数据库操作,数据库四大操作,,,
不过用android中封装的SQLiteDatabase,并不习惯里面封装的方法,还不用直接execSQL,简单明了,,
另外网上也有很多评论说这个是“轻量级”的数据库,读写比较慢,如果是大批量操作的话,估计用事务效率应该会有所提高的,,
这只是一个轻量级的数据库。