Android 数据库SQLite 写入SD卡
如果手机没有root,数据库文件是无法查看到的,不方便调试。
最好的办法是把数据库写进SD卡。
修改的地方有两处:
1.在你的helper类中把数据库文件名称 DATABASE_NAME 由原来的一个文件名,修改成路径的形式。
修改前:DATABASE_NAME = "demo.db"
public class MyDBHelper extends SQLiteOpenHelper {
    public static final int VERSION = 1;        //数据库版本号
    public static final String DATABASE_NAME = "demo.db";       //数据库名称
    public static final String TABLE_NAME = "mytag";        //数据表名称,一个数据库可以包含多张数据表,类似于excel中的sheet1,sheet2
    //MyDBHelper 的构造函数,我们关心的是名称DATABASE_NAME和版本VERSION
    public MyDBHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }
修改后:DATABASE_NAME = "/mnt/sdcard/demo.db"
public class MyDBHelper extends SQLiteOpenHelper {
    public static final int VERSION = 1;        //数据库版本号
    public static final String DATABASE_NAME =  "/mnt/sdcard/demo.db";       //数据库名称
    public static final String TABLE_NAME = "mytag";        //数据表名称,一个数据库可以包含多张数据表,类似于excel中的sheet1,sheet2
    //MyDBHelper 的构造函数,我们关心的是名称DATABASE_NAME和版本VERSION
    public MyDBHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }
因为如果只是一个单独的文件名,最后创建的数据库文件就是保存在手机内部存储卡(不是运行内存,也不是SD卡)的/data/data/包名称/databases 目录下,而没有root的手机,这个/data根文件夹是进不去的,用adb shell方式也打不开。
如果想把数据库文件.db保存到SD卡 某个目录中,则先要检测该目录是否存在,不存在则要创建。可以在MyApplication中完成这项初始化操作:
/**
* 在这里进行(1)ImageLoader的全局配置
* (2)数据库目录的创建
* (3)定义全局常量
* Created by LiChong on 2016/4/29.
*/
public class MyApplication extends Application {
//全局常量
public static final String DBDir = Environment.getExternalStorageDirectory() + File.separator
+ "MyDressingHelper" + File.separator
+ "databases" + File.separator; //数据库所在目录 @Override
public void onCreate(){
super.onCreate();
Log.d("mylog", "进入Application的onCreate(),Application的onCreate()是App最先执行的部分所以可以在这里进行整个应用的相关初始化"); //初始化ImageLoader的全局配置
initImageLoader(getApplicationContext()); //初始化数据库配置
File dir = new File(DBDir); //检测数据库目录是否存在,不存在则创建
if(!dir.exists()){
dir.mkdirs();
}
} //ImageLoader全局配置
public static void initImageLoader(Context context){
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheFileCount(20) //缓存文件数量
.tasksProcessingOrder(QueueProcessingType.LIFO)
.build(); //开始构建
ImageLoader.getInstance().init(imageLoaderConfiguration); //全局初始化配置ImageLoader
}
}
建立了自己的Application类后还要在Manifest中添加它的名字才能启动:
<application
android:name=".MyApplication"
2.最后,千万别忘了修改权限!
Android手机是有着严格的安全管控的,SD卡属于外部存储器,访问上面的文件需要添加权限。
在AndroidManifest.xml 中添加两条SD卡读写权限即可:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
如果没有添加权限,那么程序就会异常终止。
Android 数据库SQLite 写入SD卡的更多相关文章
- 转 Android:文件下载和写入SD卡学习小结
		
转自 http://blog.csdn.net/zzp_403184692/article/details/8160739 一.文件下载 Android开发中,有时需要从网上下载一些资源以供用户使 ...
 - android 建数据库 SQLite 存储sd 卡或者内存
		
android 创建数据库调用SQLiteOpenHelper,一般不直接操作SQLiteDatabase . 是通过SQLiteOpenHelper来获取 public class DBOpenHe ...
 - Android 下载文件及写入SD卡
		
Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...
 - Android从网络某个地址下载文件、写入SD卡
		
首先创建一个HttpDownloader类,获取下载文件的网络地址,将文件下载下来以String流的方式返回: public String download(String urlStr){ //url ...
 - android 将项目下的数据库拷贝到sd卡中
		
/** * 将项目下的数据库拷贝到sd卡中 */ public static boolean copyDbToSdCard() { FileInputStream fis = null; FileOu ...
 - Android数据存储之SD卡
		
为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...
 - [android] 保存文件到SD卡
		
/****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...
 - Android中播放本地SD卡中歌曲须要的加入的权限
		
使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...
 - android 写文件到sd卡问题小记
		
android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...
 
随机推荐
- 深度浅出immutable.js
			
这篇文章将讲述immutable.js的基本语法和用法. 1.fromJs() Deeply converts plain JS objects and arrays to Immutable Ma ...
 - 歌词文件解析(一):LRC格式文件的解析
			
LRC是英文lyric(歌词)的缩写,被用做歌词文件的扩展名.以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示.LRC 歌词是一种包含着“*:*”形式的“标签(tag)”的基于纯文本的歌词专用 ...
 - 【原创】Kakfa utils源代码分析(二)
			
我们继续研究kafka.utils包 八.KafkaScheduler.scala 首先该文件定义了一个trait:Scheduler——它就是运行任务的一个调度器.任务调度的方式支持重复执行的后台任 ...
 - 【转载】Lucene.Net入门教程及示例
			
本人看到这篇非常不错的Lucene.Net入门基础教程,就转载分享一下给大家来学习,希望大家在工作实践中可以用到. 一.简单的例子 //索引Private void Index(){ Index ...
 - 【转载】8天学通MongoDB——第八天 驱动实践
			
作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者, 因为提供了丰富的linq操作,相当方便. 官方驱动:https://gi ...
 - 删除html元素
			
如果需要将id是‘div2js’的div元素删除. 1.使用DOM对象 首先需要找到被删元素的父元素,通过父元素将其需要删除的子元素删除. var el = document.getElementBy ...
 - SQL查询中in、exists、not in、not exists的用法与区别
			
1.in和exists in是把外表和内表作hash(字典集合)连接,而exists是对外表作循环,每次循环再对内表进行查询.一直以来认为exists比in效率高的说法是不准确的,如果查询的两个表大小 ...
 - 不可或缺 Windows Native (14) - C++: 文件
			
[源码下载] 不可或缺 Windows Native (14) - C++: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 文件 示例CppIO2.h #prag ...
 - jquery内容选择器(根据内容匹配元素)
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow
			
泛函编程方式其中一个特点就是普遍地使用递归算法,而且有些地方还无法避免使用递归算法.比如说flatMap就是一种推进式的递归算法,没了它就无法使用for-comprehension,那么泛函编程也就无 ...