博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android SQLite
阅读量:5251 次
发布时间:2019-06-14

本文共 5513 字,大约阅读时间需要 18 分钟。

1.SQLiteOpenHelper类

管理数据库的工具类,用于创建和管理数据库,更新数据库

构造类:参数1:上下文;参数2:数据库名称;参数3:游标工程;参数4:版本号,大于1
abstract void onCreate(SQLiteDatabase db):数据库创建时执行(第一次连接获取数据库对象时执行),执行时间:调用SQLiteOpenHelper的getWritableDatabase()或getReadableDatabase()获取SQLitebase时,若数据库不存在时调用。
abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):数据库更新时执行(版本号改变时才执行)
onOpen:数据库每次打开时执行(每次打开数据库之后调用,在onCreate与onUpgrade之后调用)

synchronzied SQLiteDatabase getReadableDatabase():以读写方式打开数据库对应的SQLiteDatabase对象

synchronzied SQLiteDatabase getWritableDatabase():以读写方式打开数据库对应的SQLiteDatabase对象

两者区别:

其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。

getReadableDatabase()方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象。

2.事务

SQLiteDatabase.beginTransaction();//开启事务

SQLiteDatabasesetTransactionSuccessful();//标记成功

SQLiteDatabase.endTransaction();//停止事务

备注:在事务中执行大量SQL语句时,执行速度会大大提高。建议在事务中执行SQL语句

3.操作数据库

例子1:
//SQLiteDatabase db;
db.execSQL(sql);

1.db.execSQL("delete from person where _id = ?;", new Integer[]{id});

2.db.execSQL("update person set name = ? where _id = ?;", new Object[]{name, id});

3.db.execSQL("insert into person(name, age) values(?, ?);", new Object[]{person.getName(), person.getAge()});

4.Cursor cursor = db.rawQuery("select _id, name, age from person;", null);

if(cursor != null && cursor.getCount() > 0) {//if(cursor != null && cursor.moveToFirst()) {

while(cursor.moveToNext()) {

id = cursor.getInt(0);}

}

例子2:

使用特定方法操作数据库

/**     * 添加到person表一条数据     * @param person     */    public void insert(Person person) {        SQLiteDatabase db = mOpenHelper.getWritableDatabase();        if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作                        ContentValues values = new ContentValues();            values.put("name", person.getName());        // key作为要存储的列名, value对象列的值            values.put("age", person.getAge());            long id = db.insert("person", "name", values);            Log.i(TAG, "id: " + id);                        db.close();    // 数据库关闭        }    }        /**     * 更据id删除记录     * @param id     */    public void delete(int id) {        SQLiteDatabase db = mOpenHelper.getWritableDatabase();    // 获得可写的数据库对象        if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作                        String whereClause = "_id = ?";            String[] whereArgs = {id + ""};            int count = db.delete("person", whereClause, whereArgs);            Log.i(TAG, "删除了: " + count + "行");            db.close();    // 数据库关闭        }    }        /**     * 根据id找到记录, 并且修改姓名     * @param id     * @param name     */    public void update(int id, String name) {        SQLiteDatabase db = mOpenHelper.getWritableDatabase();        if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作            ContentValues values = new ContentValues();            values.put("name", name);                        int count  = db.update("person", values, "_id = ?", new String[]{id + ""});            Log.i(TAG, "修改了: " + count + "行");                        db.close();    // 数据库关闭        }    }        public List
queryAll() { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象 if(db.isOpen()) { String[] columns = {"_id", "name", "age"}; // 需要的列 String selection = null; // 选择条件, 给null查询所有 String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值 String groupBy = null; // 分组语句 group by name String having = null; // 过滤语句 String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy); int id; String name; int age; if(cursor != null && cursor.getCount() > 0) { List
personList = new ArrayList
(); while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移动了, 停止. id = cursor.getInt(0); name = cursor.getString(1); age = cursor.getInt(2); personList.add(new Person(id, name, age)); } db.close(); return personList; } db.close(); } return null; } /** * 根据id查询人 * @param id * @return */ public Person queryItem(int id) { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象 if(db.isOpen()) { String[] columns = {"_id", "name", "age"}; // 需要的列 String selection = "_id = ?"; // 选择条件, 给null查询所有 String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值 String groupBy = null; // 分组语句 group by name String having = null; // 过滤语句 String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy); if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行 int _id = cursor.getInt(0); String name = cursor.getString(1); int age = cursor.getInt(2); db.close(); return new Person(_id, name, age); } db.close(); } return null; }

 

转载于:https://www.cnblogs.com/Eudora/p/4119145.html

你可能感兴趣的文章
使用openssl编写服务端和客户端程序
查看>>
解决mysql 写入中文读出乱码的问题
查看>>
AFNetworking源码的学习
查看>>
UIView常见属性应用实例
查看>>
【前端学习】字符串replace使用
查看>>
Web干货存档
查看>>
System Generator实现Xilinx FPGA流水灯实验
查看>>
位操作的趣味应用
查看>>
python中列表的常用操作增删改查
查看>>
学习随笔1
查看>>
[翻译]SQL Server等待事件—THREADPOOL
查看>>
tomcat 配置JNDI数据源
查看>>
oracle分页查询
查看>>
Chrome developer tool:本人钟爱的 console、Network 功能简谈
查看>>
DemoKit编译过程
查看>>
请问 imgbtn上怎样添加文字呢
查看>>
golang print struct with key
查看>>
正则表达式判断手机号是否11位数字
查看>>
SAP SUP (转)
查看>>
linux shell脚本基础知识
查看>>