如果手机没有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卡的更多相关文章

  1. 转 Android:文件下载和写入SD卡学习小结

    转自 http://blog.csdn.net/zzp_403184692/article/details/8160739  一.文件下载  Android开发中,有时需要从网上下载一些资源以供用户使 ...

  2. android 建数据库 SQLite 存储sd 卡或者内存

    android 创建数据库调用SQLiteOpenHelper,一般不直接操作SQLiteDatabase . 是通过SQLiteOpenHelper来获取 public class DBOpenHe ...

  3. Android 下载文件及写入SD卡

    Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  4. Android从网络某个地址下载文件、写入SD卡

    首先创建一个HttpDownloader类,获取下载文件的网络地址,将文件下载下来以String流的方式返回: public String download(String urlStr){ //url ...

  5. android 将项目下的数据库拷贝到sd卡中

    /** * 将项目下的数据库拷贝到sd卡中 */ public static boolean copyDbToSdCard() { FileInputStream fis = null; FileOu ...

  6. Android数据存储之SD卡

    为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...

  7. [android] 保存文件到SD卡

    /****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...

  8. Android中播放本地SD卡中歌曲须要的加入的权限

    使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...

  9. android 写文件到sd卡问题小记

    android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...

随机推荐

  1. Ionic2学习笔记(3):Pipe

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5538630.html Pipe类似过滤器,比如,在一个字符串要展现在页面之前, 我们需要对这个字符串 ...

  2. php面向对象常见的专业术语

    类 − 定义了一件事物的抽象特点.类的定义包含了数据的形式以及对数据的操作. 对象 − 是类的实例. 成员变量 − 定义在类内部的变量.该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化 ...

  3. [Asp.net 5] DependencyInjection项目代码分析2-Autofac

    Microsoft.Framework.DependencyInjection.Autofac源码分析 该工程只有一个代码静态类AutofacRegistration,但是该类有3个扩展方法,以及3个 ...

  4. 显示XML文档时排序数据

    先看XML文档: 也可拷贝下面代码另存为XMl文档: <stepList> <steps> <step> <order>1</order> ...

  5. 在Gridview如何进行每行单元格比较

    有在论坛上看到一个问题,就是在Gridview控件中,需要对几个列的数值进行比较,原问题如下: 先在数据库中准备数据: CREATE TABLE [dbo].[RecordTime] ( Id ,) ...

  6. Ubuntu Server 16.04下ASP.NET Core Web Api + MySql + Dapper在 Jexus、nginx 下的简单测试

    一.环境及工具 1.服务器 VirtualBox5.1.4 安装 Ubuntu Server 16.04 amd64 MySql Ver 14.14 Distrib 5.6.21 Jexus 5.8. ...

  7. [范例] Firemonkey 弹簧动画

    弹簧动画效果: 不用写任何代码,只需设定下面动画属性: 参考动画曲线: http://monkeystyler.com/guide/Interpolation-and-AnimationType-Il ...

  8. 解决之前上架的 App 在 iOS 9 会闪退问题 (更新:已有 Hotfix)

    最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El Capitan v10.11 需使用下列 HotfixID: 30398, PAServer Hot ...

  9. PHP旧系统基于命名空间重构经验

    命名空间其实只是一个形式,最终目的是重构代码,但这个过程想要一蹴而就是不可能的. 一开始给了一个伪命题:基于ThinkPHP的重构(不要问为什么).经过一段的实践,发现这是一个大错特错的思维方式,其中 ...

  10. Scalaz(14)- Monad:函数组合-Kleisli to Reader

    Monad Reader就是一种函数的组合.在scalaz里函数(function)本身就是Monad,自然也就是Functor和applicative.我们可以用Monadic方法进行函数组合: i ...