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" />

 如果没有添加权限,那么程序就会异常终止。