Android设置数据库的路径

参考博客

//http://blog.csdn.net/lime110/article/details/50685095
//http://www.cnblogs.com/linjzong/p/5045839.html

按照国际惯例,先来一段扯淡,最近的项目,数据显示错误,方便测试测出问题后可以导出数据库给我看,所以就直接把数据库设置到内存卡上了

找了两个博客参考(非常感谢对于知识的分享,感谢!)


1,要设置数据库的路径,当然要有数据库。

数据库助手类,能不写的都不写了,毕竟重点是设置数据库的路径。。。(这个类,并没有什么不同的地方)



/**
 * Created by Administrator on 2017/9/17.
 */
public class DBHelper  extends SQLiteOpenHelper {

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context,name, factory, version);
    }

    public DBHelper(Context context, String name, int version) {
        this(context, name, null, version);
    }

    public DBHelper(Context context, String name) {
        this(context,name,1);
    }

    //数据库创建(初始化的时候被调用)
    @Override
    public void onCreate(SQLiteDatabase db) {
            //执行语句创建表
        String createTable ="create table personTest(id int,name varchar(10))";
        db.execSQL(createTable);
    }

    //数据库更新的时候被调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}




2创建数据库,在MainActivity中调用下面的代码即可创建数据库,我们不设置路径的时候,把手机root或者运行在模拟器上就可以看到数据库的位置位于:data/data/项目包名/databases

DBHelper helper = new DBHelper(MainActivity.this,"test.db");
SQLiteDatabase db = helper.getWritableDatabase();      //数据库onCreate方法这个时候被调用
Android设置数据库的路径_第1张图片



怎样自定义路径呢?

如果你看 了我参考的两篇博文,我想你已经想到了。。其实贼简单,就是在创建数据库的前面加上要保存的路径

pathname = Environment.getExternalStorageDirectory().getPath(); //数据库路径
DBHelper helper = new DBHelper(MainActivity.this,pathname+"/"+"test.db");
SQLiteDatabase db = helper.getWritableDatabase();      //数据库onCreate方法这个时候被调用





完整代码

数据库助手类:


/**
 * Created by Administrator on 2017/9/17.
 */
public class DBHelper  extends SQLiteOpenHelper {

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context,name, factory, version);
    }

    public DBHelper(Context context, String name, int version) {
        this(context, name, null, version);
    }

    public DBHelper(Context context, String name) {
        this(context,name,1);
    }

    //数据库创建(初始化的时候被调用)
    @Override
    public void onCreate(SQLiteDatabase db) {
            //执行语句创建表
        String createTable ="create table personTest(id int,name varchar(10))";
        db.execSQL(createTable);
    }

    //数据库更新的时候被调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

布局文件就一个按钮(代码就不贴出了)


MainActivity(点击按钮的时候创建数据库,为了兼容Android6.0所以动态申请了内存卡的读写权限)



public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private   String pathname;        //数据库路径
    private Button button1;
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE" };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this,""+ Environment.getExternalStorageDirectory().getPath(),Toast.LENGTH_SHORT).show();
        Log.e("aa", "onCreate: "+Environment.getExternalStorageDirectory().getPath() );
        //运行程序的时候会自动创建数据库,创建表
        pathname = Environment.getExternalStorageDirectory().getPath(); //数据库路径及名称
        DBHelper helper = new DBHelper(MainActivity.this,pathname+"/"+"test.db");
        SQLiteDatabase db = helper.getWritableDatabase();      //数据库onCreate方法这个时候被调用

        //http://blog.csdn.net/lime110/article/details/50685095
        //http://www.cnblogs.com/linjzong/p/5045839.html
    }




    //判断是否有内存卡读权限
    public static void verifyStoragePermissions(Activity activity) {
        try {
            //检测是否有写的权限
            int permission = ActivityCompat.checkSelfPermission(activity,
                    "android.permission.WRITE_EXTERNAL_STORAGE");
            if (permission != PackageManager.PERMISSION_GRANTED) {
                // 没有写的权限,去申请写的权限,会弹出对话框
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}



清单文件:


android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
android:name="android.permission.READ_EXTERNAL_STORAGE" />

这样就完成了自定义路径:一句话讲晒:就是在创建数据库:name前面加上要保存到的数据库路径。。可以看到在手机数据库已经保存到我们想要的路径了。。。

这些代码:我只是在模拟器和三星s6直板运行过,都可以实现自定义数据库路径,不知道在别的手机会不会遇到兼容性问题

Android设置数据库的路径_第2张图片


踩到的坑:数据库的名字要是:      .db为后缀,否则会报错


你可能感兴趣的:(Android炼气)