Android SQLite 使用总结

2020-06-08  本文已影响0人  惟吾德馨_慧

1.获取SQLiteOpenHelper

class DBOpenHelper extends SQLiteOpenHelper

2.查询语句

查询多条数据

SQLiteDatabase db = openHelper.getReadableDatabase();
Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);

示例:

Cursor cursor = query(DBCommon.PersonRecordColumns.TABLE_NAME_PERSON_DATA, DBCommon.PersonRecordColumns.projects,
                    selection, selectionArgs, groupBy, having, orderBy, limit);
            while (cursor.moveToNext()) {
                list.add(getUserInfo4Cursor(cursor));
            }

查询单条数据

SQLiteDatabase db = openHelper.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, condition);

示例:

Cursor cursor = rawQuery("select * from " + DBCommon.PersonRecordColumns.TABLE_NAME_PERSON_DATA +
                " where " + DBCommon.PersonRecordColumns.COLUMN_PERSON_PERSON_ID + " = ?", new String[]{personid});

模糊查询
参考链接:https://www.jianshu.com/p/a93586b0611b

1.%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示。
2._: 表示任意单个字符。匹配单个任意字符,它常用来限定表达式的字符长度语句

//查找数据表中名字中含有w、h、h任意字母的人员
String names = "name like ? or ? or ?"
 ArrayList<String> selectionArgs = new ArrayList<>();
selectionArgs.add("%w%");
selectionArgs.add("%h%");
selectionArgs.add("%h%");
Cursor  cursor = query(DBCommon.PersonRecordColumns.TABLE_NAME_PERSON_DATA, DBCommon.PersonRecordColumns.projects,
                    sb.toString(), (String[]) selectionArgs.toArray(new String[selectionArgs.size()]), null, null, null, null);

查询数量

//查询表中ryssztk含有某个关键字的数量
public int getRecordCount4ZTK(String ztkName) {
        return rawQuery("select count(*) from " +  DBCommon.PersonRecordColumns.TABLE_NAME_PERSON_DATA + " where ryssztk like ?",
                "%" + ztkName + "%");
    }

查询总结:
query():适用于多条数据的条件查询,不适合单条数据的查询;
rawQuery():适用于单条数据的条件查询,效率要高于query()。

3.插入数据

 /**
     * 插入单条数据
     *
     * @param cv ContentValues
     * @return
     */
    public synchronized int insert(String table, ContentValues cv) {
        if (cv == null) {
            return -1;
        }
        SQLiteDatabase db = null;
        int id = -1;
        try {
            db = mOpenHelper.getWritableDatabase();
            id = (int) db.insert(table, null, cv);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//            if(db != null){
//                db.close();
//            }
        }
        return id;
    }
    /**
     * 插入多条数据
     *
     * @param tableName 数据库的表名
     * @param cv        ContentValues 集合
     * @return 是否成功插入,一条失败,集体失败
     */
    public synchronized boolean multiInsert(String tableName, ContentValues[] cv) {
        if (cv == null || cv.length == 0) {
            return false;
        }
        SQLiteDatabase db = null;
        long id = -1;
        try {
            db = mOpenHelper.getWritableDatabase();
            db.beginTransaction();
            for (ContentValues value : cv) {
                if (value != null) {
                    id = db.insert(tableName, null, value);
                    if (id < 0) {
                        return false;
                    }
                }
            }
            db.setTransactionSuccessful();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (db != null) {
                db.endTransaction();
//                db.close();
            }
        }
        return true;
    }

多条数据的插入要比单条数据插入效率高,建议没特别需求选择多条数据插入方法!

4.更新数据

/**
     * 更新单条数据
     *
     * @param tableName     数据库的表名
     * @param cv            ContentValues
     * @param selection     删除数据列名
     * @param selectionArgs 删除数据的条件
     * @return 成功更新的條數
     */
    public synchronized int update(String tableName, ContentValues cv, String selection, String[] selectionArgs) {
        if (cv == null || TextUtils.isEmpty(selection)) {
            return 0;
        }
        int result = 0;
        SQLiteDatabase db = null;
        try {
            db = mOpenHelper.getWritableDatabase();
            result = db.update(tableName, cv, selection, selectionArgs);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (db != null) {
//                db.close();
            }
        }
        return result;
    }
ContentValues value = new ContentValues();
value.put(DBCommon.ZTKRecordColumns.COLUMN_ZTK_STATE, bean.status);
update(DBCommon.ZTKRecordColumns.TABLE_NAME_ZTK, value, "name = ?", new String[]{bean.name});

update()方法只能更新某条数据的某个字段值,一次只能更新一个字段值是,如果需要更新多个字段值,可以采取delete该条数据重新insert。

每天进步一点点。。。(2019-10-10)

上一篇下一篇

猜你喜欢

热点阅读