Android中的SQLite
来源:互联网 发布:知乎live 免费 编辑:程序博客网 时间:2024/06/05 09:31
示例代码:
MessageDatabaseHelper databaseHelper = new MessageDatabaseHelper(this); databaseHelper.getWritableDatabase();
public class MessageDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "message.db"; private static final int DB_VERSION = 1; private static class MessageTable { private static final String TABLE_NAME = "message"; private static final String COLUMN_NAME_ID = "_id"; private static final String COLUMN_NAME_FROM_NAME = "from_name"; private static final String COLUMN_NAME_TO_NAME = "to_name"; private static final String COLUMN_NAME_TIME = "time"; private static final String COLUMN_NAME_CONTENT = "content"; private static final String COLUMN_NAME_STATE = "state"; } public MessageDatabaseHelper(Context context) { //数据库文件名,数据库版本号 super(context, DB_NAME, null, DB_VERSION); } //创建数据库,调用建表语句 @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + MessageTable.TABLE_NAME + " (" + MessageTable.COLUMN_NAME_ID + " INTEGER PRIMARY KEY," + MessageTable.COLUMN_NAME_FROM_NAME + " TEXT," + MessageTable.COLUMN_NAME_TO_NAME + " TEXT," + MessageTable.COLUMN_NAME_TIME + " INTEGER," + MessageTable.COLUMN_NAME_CONTENT + " TEXT," + MessageTable.COLUMN_NAME_STATE + " INTEGER" + ");"); } //升级数据库,第一个数据库版本不需要写升级语句 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } //获取只读数据库 @Override public SQLiteDatabase getReadableDatabase() { return super.getReadableDatabase(); } //获取读写数据库 @Override public SQLiteDatabase getWritableDatabase() { return super.getWritableDatabase(); }}
插入数据
//增加数据 public void insertMessage(Message message) { SQLiteDatabase database = getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(MessageTable.COLUMN_NAME_ID, message.getId()); contentValues.put(MessageTable.COLUMN_NAME_FROM_NAME, message.getFromName()); contentValues.put(MessageTable.COLUMN_NAME_TO_NAME, message.getToName()); contentValues.put(MessageTable.COLUMN_NAME_TIME, message.getTime()); contentValues.put(MessageTable.COLUMN_NAME_CONTENT, message.getContent()); contentValues.put(MessageTable.COLUMN_NAME_STATE, message.getState()); database.insertWithOnConflict( MessageTable.TABLE_NAME, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE); }
删除数据
public void deleteMessage(long id) { SQLiteDatabase database = getWritableDatabase(); database.delete( MessageTable.TABLE_NAME, MessageTable.COLUMN_NAME_ID + " = ?", new String[] {String.valueOf(id)}); }
修改数据
public void updateMessageState(long id, int state) { SQLiteDatabase database = getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(MessageTable.COLUMN_NAME_STATE, state); database.update( MessageTable.TABLE_NAME, contentValues, MessageTable.COLUMN_NAME_ID + " = ?", new String[] {String.valueOf(id)}); }
查询数据
public List<Message> queryAllMessages() { SQLiteDatabase database = getReadableDatabase(); List<Message> messageList = new ArrayList<>(); Cursor cursor = null; try { cursor = database.query( MessageTable.TABLE_NAME, projection, null, null, null, null, sortOrder); if (cursor != null && cursor.moveToFirst()) { do { long id = cursor.getLong(cursor.getColumnIndex(MessageTable.COLUMN_NAME_ID)); String fromName = cursor.getString(cursor.getColumnIndex(MessageTable.COLUMN_NAME_FROM_NAME)); String toName = cursor.getString(cursor.getColumnIndex(MessageTable.COLUMN_NAME_TO_NAME)); long time = cursor.getLong(cursor.getColumnIndex(MessageTable.COLUMN_NAME_TIME)); String content = cursor.getString(cursor.getColumnIndex(MessageTable.COLUMN_NAME_CONTENT)); int state = cursor.getInt(cursor.getColumnIndex(MessageTable.COLUMN_NAME_STATE)); Message message = new Message(id, fromName, toName, time, content, state); messageList.add(message); } while (cursor.moveToNext()); } } finally { if (cursor != null && !cursor.isClosed()) { cursor.close(); } } return messageList; }
批量插入(事务插入)
public void insertMessage(List<Message> messageList) { SQLiteDatabase database = getWritableDatabase(); try { database.beginTransaction(); for (Message message : messageList) { ContentValues contentValues = new ContentValues(); contentValues.put(MessageTable.COLUMN_NAME_ID, message.getId()); contentValues.put(MessageTable.COLUMN_NAME_FROM_NAME, message.getFromName()); contentValues.put(MessageTable.COLUMN_NAME_TO_NAME, message.getToName()); contentValues.put(MessageTable.COLUMN_NAME_TIME, message.getTime()); contentValues.put(MessageTable.COLUMN_NAME_CONTENT, message.getContent()); contentValues.put(MessageTable.COLUMN_NAME_STATE, message.getState()); database.insertWithOnConflict( MessageTable.TABLE_NAME, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE); } database.setTransactionSuccessful(); } finally { database.endTransaction(); } }
数据库升级
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion == 1 && newVersion == 2) { updateToVersion2(db); } } private void updateToVersion2(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + MessageTable.TABLE_NAME + " ADD " + MessageTable.COLUMN_NAME_TYPE + " INTEGER DEFAULT 1;"); }
数据库的并发访问
WAL Mode 通过同一个openHelper并发访问
Content Provider
0 0
- Android中的数据库SQLite
- Android中的SQLite数据库
- Android中的数据库SQLite
- android中的sqlite数据库
- Android中的SQLite使用
- Android 中的SQLite
- Android中的SQLite 数据库
- Android中的SQLite
- Android中的SQLite数据库
- 查看android中的sqlite数据
- Android中的SQLite的使用
- Android中的sqlite事务操作
- Android中的SQLite使用学习
- android中的sqlite数据库加密
- Android开发中的SQLite优化
- 关于Android中的SQLite使用
- Android开发中的SQLite优化
- Android开发中的SQLite优化
- static关键字总结
- VS2013 MFC 对话框控件大小随窗口大小改变而改变
- 一些好用的Mac软件推荐
- Tensorflow创建和读取17flowers数据集
- 【caffe源码研究】番外篇:(2) 使用Visual Studio 看cu代码
- Android中的SQLite
- 深入理解Linux内核架构
- 递归与尾递归
- express 快速创建一个应用的骨架
- Java枚举类型的使用
- CodeForces 748E. Santa Claus and Tangerines
- 关于CSS中,引入背景图片和border的一点总结
- OSPF 的单区域配置(以华为模拟器为例)
- jQuery事件-表单事件