惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threat Research - Cisco Blogs
V2EX - 技术
V2EX - 技术
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
S
Schneier on Security
I
InfoQ
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The GitHub Blog
The GitHub Blog
S
Security @ Cisco Blogs
O
OpenAI News
W
WeLiveSecurity
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
人人都是产品经理
人人都是产品经理
Cloudbric
Cloudbric
The Last Watchdog
The Last Watchdog
The Hacker News
The Hacker News
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
NISL@THU
NISL@THU
T
Tailwind CSS Blog
V
Visual Studio Blog
PCI Perspectives
PCI Perspectives
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
D
DataBreaches.Net
B
Blog RSS Feed
N
News and Events Feed by Topic
N
News and Events Feed by Topic
H
Heimdal Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
腾讯CDC
Latest news
Latest news
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
V
V2EX
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
Help Net Security
Help Net Security

博客园 - 拿走不谢

20190131 经验总结:如何从rst文件编译出自己的sqlalchemy的文档 Python学习笔记:Flask-Migrate基于model做upgrade的基本原理 20180821 Python学习笔记:如何获取当前程序路径 网络编程之 keepalive(zz) java socket编程中backlog的含义(zz) 20170814 新鲜:EChart新增了日历图,要想办法用起来 Canvas 和 SVG 的不同 androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法 Android support 26.0.0-alpha1 产生的问题(zz) 20170711 通过阿里云与国家气象局合作的api读取历史辐照数据 Android、iOS、和Web如何做灰度发布? 周鸿祎《智能主义》读书笔记 《Python数据分析与挖掘实战》读书笔记 《腾讯传》读书笔记 《如何高效学习》读书笔记 版本控制:tortoise svn的 revert to this revision和 revert changes from this revision有什么区别? android:第十章,后台的默默劳动者——服务,学习笔记 Android: Android Studio签名打包的两种方式(zz) Android:如何生成自己的keystore(zz)
android:Android中用文件初始化sqlite数据库(zz)
拿走不谢 · 2017-05-15 · via 博客园 - 拿走不谢

    很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据。

这里有2个思路

    1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径

    2.可以考虑在第一次启动时,执行数据库初始化的sql文件.

1.在本地准备android能使用的sqlite数据库文件

使用sqlite数据库管理工具,看个人爱好(SQLite Database Browser ,Navicat Premium,)

打开数据库,创建"android_metadata"数据表

Sql代码  收藏代码

  1. CREATE TABLE "android_metadata" ("_id"  INTEGER PRIMARY KEY AUTOINCREMENT,"locale" TEXT DEFAULT 'en_US');//创建表  
  2. INSERT INTO "android_metadata" VALUES (1,'en_US');//插入值  

 创建其他应用需要的表..此处省略.

2.复制文件到应用中.

把第一步创建的数据库文件复制到应用中的assets文件夹, asserts文件夹的路径如下:

然后创建DateBaseHelper extends SQLiteOpenHelper的类文件.

代码如下:

Java代码  收藏代码

  1. public class DataBaseHelper extends SQLiteOpenHelper {  
  2.       
  3.     private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";  
  4.     private static String DB_NAME = "myDBName";  
  5.     private SQLiteDatabase myDataBase;  
  6.     private final Context myContext;  
  7.      
  8.  
  9.  
  10.  
  11.   
  12.     public DataBaseHelper(Context context) {  
  13.         super(context, DB_NAME, null1);  
  14.         this.myContext = context;  
  15.     }  
  16.   
  17.      
  18.  
  19.   
  20.     public void createDataBase()throws IOException {  
  21.         boolean dbExist = checkDataBase();  
  22.         if (dbExist) {  
  23.               
  24.         } else {  
  25.               
  26.               
  27.             this.getReadableDatabase();  
  28.             try {  
  29.                 copyDataBase();  
  30.             } catch (IOException e) {  
  31.                 throw new Error("Error copying database");  
  32.             }  
  33.         }  
  34.     }  
  35.   
  36.      
  37.  
  38.  
  39.   
  40.     private boolean checkDataBase() {  
  41.         SQLiteDatabase checkDB = null;  
  42.         try {  
  43.             String myPath = DB_PATH + DB_NAME;  
  44.             checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);  
  45.         } catch (SQLiteException e) {  
  46.               
  47.         }  
  48.   
  49.         if (checkDB != null) {  
  50.             checkDB.close();  
  51.         }  
  52.         return checkDB != null ? true : false;  
  53.     }  
  54.   
  55.      
  56.  
  57.  
  58.  
  59.   
  60.     private void copyDataBase()throws IOException {  
  61.           
  62.         InputStream myInput = myContext.getAssets().open(DB_NAME);  
  63.           
  64.         String outFileName = DB_PATH + DB_NAME;  
  65.           
  66.         OutputStream myOutput = new FileOutputStream(outFileName);  
  67.           
  68.         byte[]buffer = new byte[1024];  
  69.         int length;  
  70.         while ((length = myInput.read(buffer)) > 0) {  
  71.             myOutput.write(buffer, 0, length);  
  72.         }  
  73.   
  74.           
  75.         myOutput.flush();  
  76.         myOutput.close();  
  77.         myInput.close();  
  78.     }  
  79.   
  80.     public void openDataBase()throws SQLException {  
  81.           
  82.         String myPath = DB_PATH + DB_NAME;  
  83.         myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);  
  84.     }  
  85.   
  86.     @Override  
  87.     public synchronized void close() {  
  88.         if (myDataBase != null)  
  89.             myDataBase.close();  
  90.         super.close();  
  91.     }  
  92.   
  93.     @Override  
  94.     public void onCreate(SQLiteDatabase db) {}  
  95.   
  96.     @Override  
  97.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}  
  98.       
  99.       
  100.       
  101. }  

3.现在我们可以创建DateBaseHelper的实现操作了.

createDataBase() //创建

openDataBase()//打开只读数据库

记得要更改"YOUR_PACKAGE"为你的应用的包名

如:com.examplename.myapp

大概代码如下:

Java代码  收藏代码

  1. ...  
  2. DataBaseHelper myDbHelper = new DataBaseHelper();  
  3. myDbHelper = new DataBaseHelper(this);  
  4. try {  
  5.     myDbHelper.createDataBase();  
  6. catch (IOException ioe) {  
  7.     throw new Error("Unable to create database");  
  8. }  
  9. try {  
  10.     myDbHelper.openDataBase();  
  11. catch (SQLException sqle) {  
  12.     throw sqle;  
  13. }  
  14. ...