android本地数据库,微信数据库WCDB for Android 使用实例

Home · Tencent/wcdb Wiki
https://github.com/Tencent/wcdb/wiki

WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。
编译依赖项不是必要的,你完全可以使用预先编译好的库。
build.gradle 引入:
dependencies {
implementation 'com.tencent.wcdb:wcdb-android:1.0.2'
}

WCDB for Android
基本功能
基于SQLCipher的数据库加密
使用连接池实现并发读写
内建 Repair Kit 可用于修复损坏数据库
针对占用空间大小优化的数据库备份/恢复功能
日志输出重定向以及性能跟踪接口
内建用于全文搜索的 mmicu FTS3/4 分词器

实例:

import android.content.Context;

import com.tencent.wcdb.DatabaseErrorHandler;
import com.tencent.wcdb.database.SQLiteDatabase;
import com.tencent.wcdb.database.SQLiteOpenHelper; import java.io.File; class WcdbHelper extends SQLiteOpenHelper {
private Context mContext; public WcdbHelper(Context context, String name, byte[] password, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
super(context, name, password, factory, version, errorHandler);
this.mContext = context;
} @Override
public void onCreate(SQLiteDatabase db) { } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LogUtil.i("db","oldVersion:" + oldVersion);
LogUtil.i("db","newVersion:" + newVersion);
} public boolean onDelete(String name) {
File file = mContext.getDatabasePath(name);
return SQLiteDatabase.deleteDatabase(file);
}
}
import android.content.ContentValues;
import android.content.Context; import com.aax.exchange.entity.Favorites;
import com.tencent.wcdb.Cursor;
import com.tencent.wcdb.database.SQLiteDatabase; import java.util.ArrayList;
import java.util.List; public class FavoritesDBManager {
private WcdbHelper mDBHelper;
private SQLiteDatabase mDB;
private String name = "favorites.db";
private String password = "xxx"; public FavoritesDBManager(Context context) {
mDBHelper = new WcdbHelper(context,name,password.getBytes(),null,1,null);
mDB = mDBHelper.getWritableDatabase();
addTable();
} public boolean addFavoritesData(String tradingPair) {
try {
mDB.beginTransaction(); final String sql = "INSERT INTO favorites VALUES(NULL,?)";
Object[] objects = new Object[]{tradingPair};
mDB.execSQL(sql, objects); mDB.setTransactionSuccessful();
}catch (Exception e){
return false;
}finally {
mDB.endTransaction();
}
return true;
} public boolean addFavoritesData(Favorites favorites) {
try {
mDB.beginTransaction(); final String sql = "INSERT INTO favorites VALUES(NULL,?)";
Object[] objects = new Object[]{favorites.getTradingPair()};
mDB.execSQL(sql, objects); mDB.setTransactionSuccessful();
}catch (Exception e){
return false;
}finally {
mDB.endTransaction();
}
return true;
} public boolean addFavoritesList(List<Favorites> list) {
try {
mDB.beginTransaction(); for (Favorites favorites : list) {
Object[] objects = new Object[]{favorites.getTradingPair()};
final String sql = "INSERT INTO favorites VALUES(NULL,?)";
mDB.execSQL(sql, objects);
} mDB.setTransactionSuccessful();
} catch (Exception e) {
return false;
} finally {
mDB.endTransaction();
}
return true;
} public boolean delFavoritesByTradingPair(String tradingPair) {
try {
mDB.beginTransaction();
mDB.delete("favorites","tradingPair=?",new String[]{tradingPair});
mDB.setTransactionSuccessful();
} catch (Exception e) {
return false;
} finally {
mDB.endTransaction();
}
return true;
} public Favorites getFavoritesByTradingPair(String tradingPair){
String sql = "select * from favorites where tradingPair=?";
Cursor cursor = mDB.rawQuery(sql, new String[]{tradingPair});
while (cursor.moveToNext()){
Favorites favorites = new Favorites();
favorites.setTradingPair(cursor.getString(cursor.getColumnIndex("tradingPair")));
return favorites;
}
return null;
} public List<Favorites> getFavoritesListData() {
List<Favorites> listData = new ArrayList<>();
Cursor c = getAllFavoritesInfo();
while (c.moveToNext()) {
Favorites favorites = new Favorites();
favorites.setTradingPair(c.getString(c.getColumnIndex("tradingPair")));
listData.add(favorites);
}
c.close();
return listData;
} private Cursor getAllFavoritesInfo() {
return mDB.rawQuery("SELECT * FROM favorites", null);
} public boolean updateFavoritesByName(String tradingPair){
ContentValues values = new ContentValues();
values.put("tradingPair", tradingPair);
int flag = mDB.update("favorites", values, "tradingPair=?", new String[]{tradingPair});
if (flag > 0) {
return true;
} else {
return false;
}
} public void closeDB() {
mDB.close();
} public Boolean deleteDatabase(String name) {
return mDBHelper.onDelete(name);
} public void deleteFavoritesData() {
mDB.execSQL("DELETE FROM favorites;");
}
public void addTable() {
String SQL_CREATE = "CREATE TABLE IF NOT EXISTS favorites (_id INTEGER PRIMARY KEY AUTOINCREMENT , tradingPair VARCHAR(50) )";
mDB.execSQL(SQL_CREATE);
} }
public class Favorites {
private String tradingPair; public String getTradingPair() {
return tradingPair;
} public void setTradingPair(String tradingPair) {
this.tradingPair = tradingPair;
}
}
public void addFavorites(CoinListInfo data,BaseBindingAdapter mAdapter,Context context){
LogUtil.i("wxh", "getQuote=" + data.getQuote() + " getBase=" + data.getBase()); subscribe(coinSearchActivity,Api.getApiService().addFavorites(data.getQuote() + data.getBase()),
new ObserverResponseListener<Object>() {
@Override
public void onNext(Object o) {
//ToastUtil.showLongToast("add favorites on next");
String tradingPair = data.getQuote() + data.getBase();
FavoritesDBManager fm = new FavoritesDBManager(context);
Favorites fav = new Favorites();
fav.setTradingPair(tradingPair);
//if exits set true or set false
if(data.isFavorite.get()){
data.isFavorite.set(Boolean.FALSE);
fm.delFavoritesByTradingPair(tradingPair);
}else{
data.isFavorite.set(Boolean.TRUE);
fm.addFavoritesData(fav);
} mAdapter.notifyDataSetChanged();
} @Override
public void onError(Throwable e) {
ToastUtil.showLongToast("add favorites error");
}
}, coinSearchActivity.bindToLifecycle()); }
private void setSearch() {
mCompositeDisposable.add(RxTextView.textChanges(mBinding.etSearchKey)
.debounce(300, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.map(CharSequence::toString)
.subscribe(s -> {
//这里可以查询数据库或请求服务器查询
if (!TextUtils.isEmpty(s.trim())){
searchList.clear();
FavoritesDBManager fm = new FavoritesDBManager(CoinSearchActivity.this);
for (CoinListInfo item:
mCoinSearchViewModel.data) {
if (item.getQuote().contains(s.toUpperCase()) || item.getBase().contains(s.toUpperCase())){
String tradingPair = item.getQuote() + item.getBase();
Favorites fav = fm.getFavoritesByTradingPair(tradingPair);
if(null != fav){
item.isFavorite.set(Boolean.TRUE);
}
searchList.add(item);
}
} mAdapter.setFilterData(searchList); }else{
mAdapter.setFilterData(null);
} })); }

android本地数据库,微信数据库WCDB for Android 使用实例的更多相关文章

  1. 【转】Android动态破解微信本地数据库(EnMicroMsg.db)

    最近在公司接了一个任务,需要在几百台手机上安装一个app,目的是获取微信里面的通讯录,并且定时的把他发送到我们的服务器上.当时依次尝试的如下几个方案: 1.通过群控,将好友截图发送到服务端(pytho ...

  2. Android本地数据存储之SQLite关系型数据库 ——SQLiteDatabase

    数据库的创建,获取,执行sql语句: 框架搭建:dao 思考: 1.数据库保存在哪里? 2.如何创建数据库?如何创建表? 3.如何更新数据库?如何更改表的列数据? 4.如何获取数据库? 5.如何修改数 ...

  3. Android+PHP+MYSQL把数据库中的数据显示在Android界面上

    俗话说,好记性不如烂笔头.今天终于体会其中的道理了.昨天写好的代码不知道为何找不到了.所以今天我一定得抽出一点时间把我的代码保存起来,以防我的代码再没有了. 还是先上图片. 这个界面是用ListVie ...

  4. Android学习笔记--Sqlite数据库

    前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...

  5. Android开发学习——SQLite数据库与单元测试

    SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper  public class Myopenhelper extends SQLiteOpenHelp ...

  6. Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用

    一.android中使用什么数据库? SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中.它是D.RichardHipp建立的公有领域项目.SQLite 是一个软件库,实现 ...

  7. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  8. Android如何连接MySQL数据库

    Android开发中,大多数连接到远程MySQL数据库的方法是加入特定的Service到代码中.由于MySQL通常是和PHP一起使用的,最简单以及最常见的方法是写PHP脚本管理数据连接,以及从Andr ...

  9. Android Studio下SQLite数据库的配置与使用(完)

    一,AS开发app用,所用的数据库有限制,必须使用较小的SQLite(MySql和Sql Server想想就不显示) 但是该数据库并不需要我们单独下载,安装的SDK中已经有了,在C:\AndroidS ...

随机推荐

  1. 一个ajax请求,接收json数据

    <a id="inviterDel" onclick="delInviter(${item.inviterAddId})">删除</a> ...

  2. vue package-lock.json的作用

    其实用一句话来概括很简单,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致.

  3. Dockerfile语法解析

    Dockfile介绍 从上到下依次执行 每次执行一条指令就创建一个镜像层 第一条指令必须是FROM    表示需要构建的镜像是由哪个镜像为基础镜像   后续的指令运行于此基准镜像所提供的运行环境 可以 ...

  4. 004-docker命令-容器生命周期管理、容器操作

    1.容器生命周期管理 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: - ...

  5. 为什么char *name="it",printf("%s",name) 能够输出字符串?

    “it”里面是3个字符  “i”“t”“/0”,%s会打印指针指向的字符就是“i”,知道遇到“/0”停止,所以打印出来是“it”

  6. OpenVPN简介及架构详解

    OpenVPN简介 1 简介    VPN(Virtual Private Network)直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道. OpenVPN无疑是Linux ...

  7. DES、RC4、AES等加密算法优势及应用

    [IT168 技术]1篇文章,1部小说被盗取,全靠维(si)权(bi)捍卫自己的原创权利.程序员捍卫自己珍贵的代码,全靠花式的加密算法.代码加密有多重要?程序员半年做出的产品,盗版者可能半天就能完全破 ...

  8. Django 框架 django的请求生命周期

    概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,同时http请求是无状态的,可以通过session和cookie来辅助. 浏览器通过ip和端口及路由方式访问服务端. 在Djang ...

  9. tf中计算图 执行流程学习【转载】

    转自:https://blog.csdn.net/dcrmg/article/details/79028003 https://blog.csdn.net/qian99/article/details ...

  10. Windows 下MySql Replication(复制)配置

    环境准备 到官网下载mysql-installer-web-community-5.7.21.0.msi并安装,选择MySql Workbench,记录安装时root输入的密码. 需要安装在两台机器上 ...