Android中SQLite使用示例
来源:互联网 发布:淘宝远望手机怎么样 编辑:程序博客网 时间:2024/05/22 11:29
我们首先定义一下数据库的表名和列名:
public class CrimeDbSchema { public static final class CrimeTable { public static final String NAME = "crimes"; public static final class Cols { public static final String UUID = "uuid"; public static final String TITLE = "title"; public static final String DATE = "date"; public static final String SOLVED = "solved"; } }}
Android中数据库的创建,一般依赖于继承SQLiteOpenHelper的子类,例如:
public class CrimeBaseHelper extends SQLiteOpenHelper{ private static final int VERSION = 1; private static final String DATABASE_NAME = "crimeBase.db"; public CrimeBaseHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } //重写onCreate函数,完成数据库的创建 @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { //调用execSQL创建数据库 //指定表的名称及其中的列 sqLiteDatabase.execSQL("create table " + CrimeTable.NAME + "(" + "_id integer primary key autoincrement, " + CrimeTable.Cols.UUID + ", " + CrimeTable.Cols.TITLE + ", " + CrimeTable.Cols.DATE + ", " + CrimeTable.Cols.SOLVED + ")"); } @Override //数据库升级时才会调用,通过VERSION来判断 public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { }}
定义了SQLiteOpenHelper后,代码中通过SQLiteOpenHelper的接口就可以获得数据库,类似的代码如下:
//在调用SQLiteOpenHelper的getWritableDatabase时,SQLiteOpenHelper会判断数据是否创建过数据库//没有创建过,则回调子类的onCreate函数进行创建; 否则,根据版本的变化情况,决定是否调用onUpgrademDataBase = new CrimeBaseHelper(context.getApplicationContext()).getWritableDatabase();
向数据库写入信息时,一般会用到ContentValues,例如:
private static ContentValues getContentValues(Crime crime) { //ContentValues以键值对的方式写入信息 //其中键就是数据库中的列 ContentValues values = new ContentValues(); values.put(CrimeTable.Cols.UUID, crime.getId().toString()); values.put(CrimeTable.Cols.TITLE, crime.getTitle()); values.put(CrimeTable.Cols.DATE, crime.getDate().getTime()); values.put(CrimeTable.Cols.SOLVED, crime.isSolved() ? 1 : 0); return values;}
有了ContentValues后,就可对数据库进行增、删、改、查操作,例如:
public void addCrime(Crime c) { ContentValues values = getContentValues(c); //数据库的插入操作 mDataBase.insert(CrimeTable.NAME, null, values);}public void removeCrime(Crime c) { //数据库删除操作 mDataBase.delete(CrimeTable.NAME, CrimeTable.Cols.UUID + " = ?", new String[] {c.getId().toString()});}public void updateCrime(Crime c) { String uuidString = c.getId().toString(); ContentValues values = getContentValues(c); //数据库更新的操作 mDataBase.update(CrimeTable.NAME, values, CrimeTable.Cols.UUID + " = ?", new String[] {uuidString});}private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs) { //query接口将返回一个Cursor对象 Cursor cursor = mDataBase.query( CrimeTable.NAME, null, whereClause, whereArgs, null, null, null); //从Cursor对象中,再进一步解析出数据 //由于Cursor解析数据的过程比较繁琐,因此一般定义一个CursorWrapper来封装对应的操作 return new CrimeCursorWrapper(cursor);}
以上API参数的具体含义,参考SQLiteDatabase中的注释即可,此处不做进一步描述。
CursorWrapper实现的例子,如下:
public class CrimeCursorWrapper extends CursorWrapper{ public CrimeCursorWrapper(Cursor cursor) { super(cursor); } public Crime getCrime() { //CursorWrapper继承Cursor的全部方法 String uuidString = getString(getColumnIndex(CrimeTable.Cols.UUID)); String title = getString(getColumnIndex(CrimeTable.Cols.TITLE)); long date = getLong(getColumnIndex(CrimeTable.Cols.DATE)); int isSolved = getInt(getColumnIndex(CrimeTable.Cols.SOLVED)); Crime crime = new Crime(UUID.fromString(uuidString)); crime.setTitle(title); crime.setDate(new Date(date)); crime.setSolved(isSolved != 0); return crime; }}
当然,在获取到Cursor后,需要主动关闭它,例如:
public List<Crime> getCrimes() { List<Crime> crimes = new ArrayList<>(); CrimeCursorWrapper cursor = queryCrimes(null, null); //前面已经提到过,CursorWrapper继承了Cursor的所有方法 try { cursor.moveToFirst(); while(!cursor.isAfterLast()) { crimes.add(cursor.getCrime()); cursor.moveToNext(); } } finally { //使用后关闭 cursor.close(); } return crimes;}
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的使用
- python 下 pip 安裝
- Javascript的简单测试环境
- 关于安卓服务防杀的问题
- Log4j日志配置小记
- SQL(2)
- Android中SQLite使用示例
- 8.2集合类Map
- MySQL数据库基准压力测试工具之MySQLSlap使用实例
- Spring Boot学习笔记
- java中volatile关键字的含义
- POJ 3465 Battle 可能会
- MySQL最大连接数设置
- 简单了解java变量
- 解决背景透明,内容字体不透明