android本地数据库,微信数据库WCDB for Android 使用实例
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 使用实例的更多相关文章
- 【转】Android动态破解微信本地数据库(EnMicroMsg.db)
		
最近在公司接了一个任务,需要在几百台手机上安装一个app,目的是获取微信里面的通讯录,并且定时的把他发送到我们的服务器上.当时依次尝试的如下几个方案: 1.通过群控,将好友截图发送到服务端(pytho ...
 - Android本地数据存储之SQLite关系型数据库 ——SQLiteDatabase
		
数据库的创建,获取,执行sql语句: 框架搭建:dao 思考: 1.数据库保存在哪里? 2.如何创建数据库?如何创建表? 3.如何更新数据库?如何更改表的列数据? 4.如何获取数据库? 5.如何修改数 ...
 - Android+PHP+MYSQL把数据库中的数据显示在Android界面上
		
俗话说,好记性不如烂笔头.今天终于体会其中的道理了.昨天写好的代码不知道为何找不到了.所以今天我一定得抽出一点时间把我的代码保存起来,以防我的代码再没有了. 还是先上图片. 这个界面是用ListVie ...
 - Android学习笔记--Sqlite数据库
		
前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...
 - Android开发学习——SQLite数据库与单元测试
		
SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper public class Myopenhelper extends SQLiteOpenHelp ...
 - Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用
		
一.android中使用什么数据库? SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中.它是D.RichardHipp建立的公有领域项目.SQLite 是一个软件库,实现 ...
 - Android 系统API实现数据库的增删改查和SQLite3工具的使用
		
在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...
 - Android如何连接MySQL数据库
		
Android开发中,大多数连接到远程MySQL数据库的方法是加入特定的Service到代码中.由于MySQL通常是和PHP一起使用的,最简单以及最常见的方法是写PHP脚本管理数据连接,以及从Andr ...
 - Android Studio下SQLite数据库的配置与使用(完)
		
一,AS开发app用,所用的数据库有限制,必须使用较小的SQLite(MySql和Sql Server想想就不显示) 但是该数据库并不需要我们单独下载,安装的SDK中已经有了,在C:\AndroidS ...
 
随机推荐
- netstat 查看端口
			
-l 仅列出有在监听(listen)的服务状态 -n 拒绝显示别名,能显示数字的全部转化成数字 -p 显示建立相关链接的程序名 -t 仅显示 tcp 相关选项 -u 仅显示 udp 相关选项 -a 显 ...
 - 静态文件link 数据库迁移命令 新建app命令
			
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"& ...
 - vue mounted中监听div的变化
			
vue mounted中监听div的变化 <div style="width:200px;height:30px;background: #0e90d2" id=" ...
 - JAVA基础——时间Date类型转换
			
在java中有六大时间类,分别是: 1.java.util包下的Date类, 2.java.sql包下的Date类, 3.java.text包下的DateFormat类,(抽象类) 4.java.te ...
 - 分词、词性标注POS等学习【转载】
			
转自:https://cloud.tencent.com/developer/article/1091815 1. 分词(Word Cut) 英文:单词组成句子,单词之间由空格隔开 中文:字.词.句. ...
 - centos下安卓构建打包太慢
			
最近不清楚什么情况,在linux下构建安卓打包时,很慢,很慢...... 之前还是好好的,一个构建三四分钟,现在尽然要两三个小时,人都要崩溃了.... 当时据说公司用的联通网有问题了,正在处理,可是网 ...
 - (转载)深入了解MyBatis参数
			
原文地址:http://blog.csdn.net/isea533/article/details/44002219 深入了解MyBatis参数 相信很多人可能都遇到过下面这些异常: "Pa ...
 - iOS 开发笔记-报错处理
			
1.xcode7报错:does not contain bitcode 解决方法:Build Settings 搜索 bitcode 将Enable Bitcode更改为NO即可 2.Code Si ...
 - smali加入日志
			
const-string v0, "aaatag"const-string v1, "msg"invoke-static {v0,v1}, Landroid/u ...
 - SSH--完全分布式主机设置【克隆过安装过Hadoop的主机后】
			
====准备完全分布式主机的ssh==== 2018-12-21 14:27:47 1.删除所有主机上.ssh下所有文件 2.在s250主机上生成密钥对 $>ssh-keygen -t rsa ...