因为SQLite支持标准的SQL语句,因此我们可以用标准SQL语句才增删改查数据库,推荐使用占位符的sql语句,看起来更加清爽,下面是我的代码示例:
package com.hw.droid.hwcatalog; public class DatabaseManager { private static DatabaseManager singleton = null; private SQLiteDatabase wsd = null; private SQLiteDatabase rsd = null; private DatabaseManager() { } public static DatabaseManager getInstance(Context context) { if (singleton == null) { synchronized (DatabaseManager.class) { if (singleton == null) { DatabaseHelper databaseHelper = DatabaseHelper.getInstance(context); singleton = new DatabaseManager(); singleton.wsd = databaseHelper.getWritableDatabase(); singleton.rsd = databaseHelper.getReadableDatabase(); } } } return singleton; } public void initAccountTable(List<AccountData> listDatas) { if (listDatas == null || listDatas.size() <= 0) { return; } wsd.beginTransaction(); try { for (AccountData data : listDatas) { insertAccountTable(data); } wsd.setTransactionSuccessful(); } finally { wsd.endTransaction(); } } private void insertAccountTable(AccountData accData) { String sql = "insert into " + AccountTable.TABLE_NAME + "(" + AccountTable.USERNAME + ", " + AccountTable.USERNICK + ", " + AccountTable.AVATAR_URL + ", " + AccountTable.PORTRAIT + ", " + AccountTable.OAUTH_TOKEN + ", " + AccountTable.OAUTH_TOKEN_SECRET + ", " + AccountTable.INFOJSON + " " + ")" + " values(?, ?, ?, ?, ?, ?, ?)"; wsd.execSQL(sql, new Object[] { accData.getUserName(), accData.getUserNick(), accData.getUrl(), accData.getPort(), accData.getToken(), accData.getSecret(), accData.getJson(), accData.getThreads(), }); } public List<AccountData> getAccountDatas() { List<AccountData> listDatas = selectAccountData(); return listDatas; } private List<AccountData> selectAccountData() { List<AccountData> listAccountData = new ArrayList<AccountData>(); String querySql = "select " + AccountTable.USERNAME + ", " + AccountTable.USERNICK + ", " + AccountTable.AVATAR_URL + ", " + AccountTable.PORTRAIT + ", " + AccountTable.OAUTH_TOKEN + ", " + AccountTable.OAUTH_TOKEN_SECRET + ", " + AccountTable.INFOJSON " " + " from " + BbsForumsTable.TABLE_NAME; Cursor cursor = rsd.rawQuery(querySql, null); if (cursor.moveToFirst()) { do { AccountData data = new AccountData(); data.setUserName(cursor.getString(cursor.getColumnIndex(AccountTable.USERNAME))); data.setUserNick(cursor.getString(cursor.getColumnIndex(AccountTable.USERNICK))); data.setUrl(cursor.getString(cursor.getColumnIndex(AccountTable.AVATAR_URL))); data.setPort(cursor.getString(cursor.getColumnIndex(AccountTable.PORTRAIT))); data.setToken(cursor.getString(cursor.getColumnIndex(AccountTable.OAUTH_TOKEN))); data.setSecret(cursor.getString(cursor.getColumnIndex(AccountTable.OAUTH_TOKEN_SECRET))); data.setJson(cursor.getString(cursor.getColumnIndex(AccountTable.INFOJSON))); listAccountData.add(data); } while (cursor.moveToNext()); } cursor.close(); return listAccountData; } public void deleteBbsDatas() { String delSql = "delete from " + AccountTable.TABLE_NAME; wsd.execSQL(delSql); } }
事物(DBTransaction)
Android中经常会用到数据库缓存,特别是wifi情况下遇到数据不一致情况需要更新缓存数据,这个时候就需要用到事物处理,保证操作的完整性和速度。Android中使用SQLite保证事务完整性示例如下:
public void initAccountTable(List<AccountData> listDatas) { if (listDatas == null || listDatas.size() <= 0) { return; } wsd.beginTransaction(); try { for (AccountData data : listDatas) { insertAccountTable(data); } wsd.setTransactionSuccessful(); } finally { wsd.endTransaction(); } }
通过beginTransaction()开启事务,endTransaction()结束事务,并且设置事务执行成功标识setTransactionSuccessful().
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作SQLite数据库技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
标签:SQLite
相关阅读 >>
scrapy+scrapyd+gerapy爬虫调度框架超详细教程
windows平台python连接Sqlite3数据库的方法分析
androidstudio数据存储建立Sqlite数据库实现增删查改
更多相关阅读请进入《Sqlite》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。