Android设置数据库的路径

来源:互联网 发布:电信光猫有几个端口 编辑:程序博客网 时间:2024/05/16 19:06

参考博客

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

按照国际惯例,先来一段扯淡

------------------最近的项目,很多数据显示错误,贼恶心,方便测试测出问题后可以导出数据库给我看,所以就直接把数据库设置到内存卡上了

对于各位大佬来说,或许很简单。公司没有大佬带,还能怎的,各种google,百度咯,我心绝望啊,找了两个博客参考(非常感谢对于知识的分享,感谢!强烈建议阅读原文)




新手上路,没有直接在公司的项目上动手,写了一个小demo

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方法这个时候被调用



怎样自定义路径呢?

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

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();        }    }}



清单文件:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

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

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



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


原创粉丝点击