android读取mysql数据库文件_Android开发系列(十七):读取assets目录下的数据库文件...
在做Android应用的时候,不可避免要用到数据库。但是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的。
(PS:这篇博客解决了我前面博客中写的一个小游戏的一个问题,另外也可以读取Raw目录下的数据库文件)
这就造成了一个问题,这个问题其实很好解决,解决方法如下:
我们首先把有数据的数据库文件放在assets资源目录下边,然后在apk应用启动的时候,把assets目录下的数据库文件的数据写入到真机的内存中去。
下边开始我们的代码编写:
首先,我们建立一个datab的Android Project命名为datab,我们把工程的目录视图贴出来:
我们首先要创建一个数据库,可以在DatabActivity.java中用sql语句创建,然后插入几条数据。然后把创建好并且插入数据的数据库放入assets文件夹下边。
我们看下我放入的test.db数据库的结构:
可以看到,在test.db中我们插入了三条数据。
接下来,我们就是要在应用启动的时候读取assets目录下的数据库,然后把test.db写入SDcard的data/data/com.datab.cn路径下边。
我们首先新建一个类:SQLdm.java:
packagecom.datab.cn;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importandroid.content.Context;
importandroid.content.res.AssetManager;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.util.Log;
/**
* 这个类就是实现从assets目录读取数据库文件然后写入SDcard中,如果在SDcard中存在,就打开数据库,不存在就从assets目录下复制过去
* @author Big_Adamapple
*
*/
publicclassSQLdm {
//数据库存储路径
String filePath = "data/data/com.datab.cn/test.db";
//数据库存放的文件夹 data/data/com.main.jh 下面
String pathStr = "data/data/com.datab.cn";
SQLiteDatabase database;
publicSQLiteDatabase openDatabase(Context context){
System.out.println("filePath:"+filePath);
File jhPath=newFile(filePath);
//查看数据库文件是否存在
if(jhPath.exists()){
Log.i("test","存在数据库");
//存在则直接返回打开的数据库
returnSQLiteDatabase.openOrCreateDatabase(jhPath,null);
}else{
//不存在先创建文件夹
File path=newFile(pathStr);
Log.i("test","pathStr="+path);
if(path.mkdir()){
Log.i("test","创建成功");
}else{
Log.i("test","创建失败");
};
try{
//得到资源
AssetManager am= context.getAssets();
//得到数据库的输入流
InputStream is=am.open("test.db");
Log.i("test", is+"");
//用输出流写到SDcard上面
FileOutputStream fos=newFileOutputStream(jhPath);
Log.i("test","fos="+fos);
Log.i("test","jhPath="+jhPath);
//创建byte数组 用于1KB写一次
byte[] buffer=newbyte[1024];
intcount =0;
while((count = is.read(buffer))>0){
Log.i("test","得到");
fos.write(buffer,0,count);
}
//最后关闭就可以了
fos.flush();
fos.close();
is.close();
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
returnnull;
}
//如果没有这个数据库 我们已经把他写到SD卡上了,然后在执行一次这个方法 就可以返回数据库了
returnopenDatabase(context);
}
}
}
然后,我们在DatabActivity.java中获得数据库中的数据:
packagecom.datab.cn;
importandroid.app.Activity;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.os.Bundle;
importandroid.widget.TextView;
publicclassDatabActivityextendsActivity {
/** Called when the activity is first created. */
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//打开数据库输出流
SQLdm s = newSQLdm();
SQLiteDatabase db =s.openDatabase(getApplicationContext());
TextView textv = (TextView) findViewById(R.id.textv);
//查询数据库中testid=1的数据
Cursor cursor = db.rawQuery("select * from testbiao where testid=?",newString[]{"1"});
String name = null;
if(cursor.moveToFirst()){
name = cursor.getString(cursor.getColumnIndex("name"));
}
//这是一个TextView,把得到的数据库中的name显示出来.
textv.setText(name);
cursor.close();
}
}
我们的main.xml视图也贴出来吧,很简单,一看就懂了。
然后,我们在虚拟机上看看我们的界面是什么样的:
可以看到,我们得到了数据库中的数据了,接下来大家可以把bin目录下的apk文件放入到真机中测试,依然会得到数据库中的数据
android读取mysql数据库文件_Android开发系列(十七):读取assets目录下的数据库文件...相关推荐
- Android之解决PC浏览器访问手机服务端取assets目录下的文件页面显示不出来问题
1 问题 我在手机里面写了Java socket服务,然后把前端的图片和css和js的文件放到了安卓项目的 assets目录,然后浏览器访问服务,我会把 assets目录下的文件读出来,然后用Data ...
- (转)Unity Assets目录下的特殊文件夹名称(作用和是否会被打包到build中)
原文:http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder 1.隐藏文件夹 以.开头的文件夹会被Un ...
- asset文件夹路径 unity_Unity Assets目录下的特殊文件夹名称
1.隐藏文件夹 以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中. 2.Standard Assets 在这个文件夹中的脚本最先被编 ...
- java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化
列举目录中的所有文件 首先给出代码: Files.list(Paths.get(".")).forEach(System.out::println); Files.list方法得到 ...
- JAVA file列出所有文件_用Java代码列出一个目录下所有的文件
1.File类 File类在java.io.File包中,所以要导入这个包. File类中用到的方法: boolean isDirectory() 测试此抽象路径名表示的文件是否是个目录 ...
- webview加载assets目录下html静态文件
1. 路径是"file:///android_asset/w**.html",而不是"file:///assets/w**dex.html"package co ...
- vue3vite工程里面引入assets目录下的图片文件(一种方法)
<template><div><p>轮播图</p><van-swipe class="my-swipe" :autoplay= ...
- 安卓读取mysql数据库文件路径_Android开发实现读取assets目录下db文件的方法示例...
本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api ...
- Android读取assets目录下文件数据内容
Android读取assets目录下文件数据内容 Android的体系架构设计中,assets目录下的数据内容(图片.文件等等)将不会被Android系统压缩.二次处理等,assets目录下的文件 ...
最新文章
- 我在旷视研究院做检测 | 技术头条
- 用Map构造选择题题库(洛谷P5601题题解,Java语言描述)
- vueCli3中使用代理,点击页面的刷新按钮时报错
- 输出斐波那契数列的第n项
- Web.config中注册用户控件和自定义控件
- 网卡驱动程序问题---电脑自己没操作,突然连不上网
- Debian Ubuntu/Centos7设置某些软件不自动更新
- 完全干净卸载 iTunes 步骤
- lenovo计算机无法启动,联想台式电脑不能启动开机
- Python编程定义函数参数的小tips
- 计算机在化学中论文3000字,化学论文范文3000字_化学论文发表
- 留德APS审核 - 计算机科学与技术 - 2020北京英语审核 (一审通过)
- 多少秒算长镜头_什么是长镜头画面(电影里的长镜头有哪些分类)
- 星淘惠告诉你跨境平台那么多,凭什么要选亚马逊?
- Python numpy函数:shape用法(简单样本及样本对应变量场景)
- 语音模块LD3320模块的二次开发,并与树莓派进行串口通信
- 学python人工智能电脑要什么配置_学Python需要什么配置的电脑?
- Effective Modern C++[实践]->优先使用nullptr,而非0或NULL
- 网络时间协议(NTP)--网络大典
- 所有帖子的 分类 总结