首页 > 其他分享 >Android Study 将DB打包APK

Android Study 将DB打包APK

时间:2022-11-10 19:34:08浏览次数:42  
标签:String DB cursor APK import new Android null


LZ-Say:最近天有点凉了,小风嗖嗖的~各位注意身体~

还记得项目中有相关城市以及区县联动显示,之前老版本是将这些内容保存文本,之后读取,转化,显示。

挺麻烦的,所以打算直接弄成数据库类型,打包进去,读取速度也会有所提升。

一般的话,我们直接将DB文件放在res下的raw或者assets,放在这里,是因为在生成apk的时候不会被压缩~

东西很简单 直接放源码了

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

/**
* 数据库管理类 Created by HLQ on 2017/8/14
*/

public class DBManager {

private static final int BUFFER_SIZE = 1024;

private Context mContext;

/**
* 数据库名称
*/
private static String DB_NAME = "hlq-test.db";

/**
* City名称
*/
private String TABLE_CITY = "city";

/**
* Country名称
*/
private String TABLE_COUNTRY = "country";

/**
* 数据库路径
*/
private static String PATH_DB;

public DBManager(Context context) {
this.mContext = context;
PATH_SMB_DB = File.separator + "data"
+ Environment.getDataDirectory().getAbsolutePath() + File.separator
+ context.getPackageName() + File.separator + "databases" + File.separator;
copyDBFile();
}

/**
* 拷贝数据库到data下
*/
private void copyDBFile() {
File dir = new File(PATH_DB);
if (!dir.exists()) {
dir.mkdirs();
}
File dbFile = new File(PATH_DB + DB_NAME);
if (!dbFile.exists()) {
InputStream is;
OutputStream os;
try {
is = mContext.getResources().getAssets().open(DB_NAME);
os = new FileOutputStream(dbFile);
byte[] buffer = new byte[BUFFER_SIZE];
int length;
while ((length = is.read(buffer, 0, buffer.length)) > 0) {
os.write(buffer, 0, length);
}
os.flush();
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 获取热门城市
*
* @return
*/
public static List<CityModel> getHotCityList() {
List<CityModel> cityList = new ArrayList<>();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(PATH_DB + DB_NAME, null);
Cursor cursor = db.query("hot_city", null, null, null, null, null, null);
while (cursor.moveToNext()) {
String cityID = cursor.getString(cursor.getColumnIndex("hot_city_id"));
String cityName = cursor.getString(cursor.getColumnIndex("hot_city_name"));
String cityCode = cursor.getString(cursor.getColumnIndex("hot_city_code"));
cityList.add(new CityModel(cityID, cityName, cityCode, 0));
}
cursor.close();
return cityList;
}

/**
* 获取城市
*
* @return
*/
public static List<CityModel> getCityList() {
List<CityModel> cityList = new ArrayList<>();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(PATH_DB + DB_NAME, null);
Cursor cursor = db.query("city", null, null, null, null, null, null);
while (cursor.moveToNext()) {
String cityID = cursor.getString(cursor.getColumnIndex("city_id"));
String cityName = cursor.getString(cursor.getColumnIndex("city_short_name"));
String cityCode = cursor.getString(cursor.getColumnIndex("city_code"));
smbCityList.add(new CityModel(cityID, cityName, cityCode, 0));
}
cursor.close();
return cityList;
}

/**
* 获取区县
*
* @param cityId
* @return
*/
public static List<CityModel> getCountryList(String cityId) {
List<CityModel> cityList = new ArrayList<>();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(PATH_DB + DB_NAME, null);
Cursor cursor = db.rawQuery("select * from country where city_id=?", new String[]{cityId});
while (cursor.moveToNext()) {
String countryID = cursor.getString(cursor.getColumnIndex("country_id"));
String cityName = cursor.getString(cursor.getColumnIndex("country_name"));
cityList.add(new CityModel(countryID, cityName));
}
cursor.close();
return cityList;
}

}

然后再MyApplication进行初始化即可~

主要方法:copyDBFile()

下面简单写了几种调用查询方法,可以参考~

给自己留点东西,方便以后用到直接拿走~


标签:String,DB,cursor,APK,import,new,Android,null
From: https://blog.51cto.com/u_13346181/5841979

相关文章

  • Android Study 之学(kao)习(bei)官方关于64k异常处理 ^_^
    LZ-Says:在外面呆了一年又一年,似乎都快忘记当初出来的目的,不过,幸好,不忘初心~给家里买点东西,家里开心,我也开心~这就够了。前言随着APP的一次又一次迭代,APP的体积也越来越大,这......
  • Android Studio 2.3.1 变更SVN项目地址
    LZ-Says:技术前行道路上,真是挖坑不断,踩坑不止,填坑没完。。。前段时间访问SVN,结果看到上面乱糟糟的,这个给我愁的啊,直接归档整理了下。整理之后,之前项目SVN地址也没替换,今天更......
  • 解决Android Studio控制台中文乱码(方框)问题
    LZ-Say:坚持自己的,一步一个脚印努力走下去,加油!最近遇到个恶心的事儿,就使用死丢丢的时候,发现怎么我的控制台输出中文都显示方框???别人都没事,恶心坏我了。经过各种百度,终于找到解......
  • Android Study 之冷启动优化(解决启动短暂白屏or黑屏)
    LZ-Says:话说真正负责项目后才发现,想要软件越来越好,就要从细节抓问题,去解决问题,这样我们的软件才会越来越好~前言今天下班路上闲的无聊随便点了几个app,包括正在负责的几个项......
  • Android Study之总结使用ListView时需要去除相关效果的属性
    LZ-Says:各种忙啊。。。话说虽然之前推出一个RecyclerView替代了ListView以及GirdView,但是ListView依旧是ListView,掌握点相关知识多少还是有点用处的。使用ListView时,不免......
  • Android Study 之 极光推送使用心得以及记录
    LZ-says:啧啧,最近风起云淡,快过年喽~~~又是一件纠结的事儿。。。前言最近项目遇到推送,与后台贱人于一合计,果断采用了极光推送。在使用过程中,有爽有不爽,特意再次记录下。使用记......
  • SCHEDULE_EXACT_ALARM权限在android12.0崩溃的问题
    问题重现简单讲,就是以Android12为目标平台的App,如果使用到了AlarmManager来设置定时任务,并且设置的是精准的闹钟(使用了setAlarmClock()、setExact()、setExactAndAllowW......
  • CentOS下安装MariaDB
    1.安装服务端安装MySQL软件,可以在windows和linux下安装,此处只提供centos下安装过程。MariaDb是最近推出一款企业级MYSQLServerPerconaServer和MariaDb是当前最为流......
  • MySQL-InnerDB原理
     InnerDB实现原理 它是MySQL从5.5版本卡死的默认的存储引擎,是第一份支持ACID特性的MySQL存储引擎,特点是行锁设计,支持MVCC(多版本并发控制),支持外键......
  • MySQL-InnoDB的MVCC
     InnoDBMVCCInnoDB的MVCC,其实是通过undolog来实现的,可以理解为是通过在每行记录后面保存两个隐藏的列来实现的,分别保存了这个行的创建时间,一个保......