将预填充的Sqlite数据库复制到Android应用程序数据库文件夹

将预填充的Sqlite数据库复制到Android应用程序数据库文件夹,android,database,sqlite,android-6.0-marshmallow,Android,Database,Sqlite,Android 6.0 Marshmallow,我使用一个预填充的SQLite数据库为Android做了一个大项目,它工作得非常好。 现在我正试图重用它,但它在Android 6.0+设备上不起作用,在旧的Android版本上它仍然起作用。问题是每次我试图访问数据时,数据库都是空的。 我尝试了一些东西,制作了我能想到的最简单的应用程序 我一直在尝试更改“/data/data/…/database”以获得合适的位置,但没有办法使其工作。 也许我需要特殊的许可才能在6.0+Android或类似的环境下工作? 有什么帮助吗? 谢谢 public类M

我使用一个预填充的SQLite数据库为Android做了一个大项目,它工作得非常好。 现在我正试图重用它,但它在Android 6.0+设备上不起作用,在旧的Android版本上它仍然起作用。问题是每次我试图访问数据时,数据库都是空的。 我尝试了一些东西,制作了我能想到的最简单的应用程序

我一直在尝试更改“/data/data/…/database”以获得合适的位置,但没有办法使其工作。 也许我需要特殊的许可才能在6.0+Android或类似的环境下工作? 有什么帮助吗? 谢谢

public类MainActivity扩展了AppCompatActivity{
私有数据库助手dbHelper;
文本视图文本视图1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1=findViewById(R.id.textViewText);
数据库连接();
textView1.setText(dbHelper.getAll());
}
私有void databaseConexion()
{
dbHelper=新的DataBaseHelper(此);
试一试{
dbHelper.createDataBase();
}捕获(ioe异常ioe){
抛出新错误(“无法创建数据库”);
}
}
}
public类DataBaseHelper扩展了SQLiteOpenHelper{
私有静态字符串DB_PATH=“/data/data/enkend.apps.proyects.pogo.sqlitetest/databases/”;
私有静态字符串DB_NAME=“Test.DB”;
私有SQLiteDatabase-myDataBase;
私有最终上下文myContext;
/**
*建造师
*获取并保留传递的上下文的引用,以便访问应用程序资产和资源。
*
*@param上下文
*/
公共数据库助手(上下文){
super(上下文,DB_名称,null,1);
this.myContext=上下文;
}
public void createDataBase()引发IOException{
myContext.deleteDatabase(数据库名称);
布尔值dbExist=checkDataBase();
如果(!dbExist){
这是.getReadableDatabase();
试一试{
copyDataBase();
}捕获(IOE异常){
抛出新错误(“复制数据库时出错”);
}
}
}
私有布尔校验数据库(){
文件databasePath=myContext.getDatabasePath(DB\u名称);
返回databasePath.exists();
}
私有void copyDataBase()引发IOException{
InputStream myInput=myContext.getAssets().open(DB_NAME);
字符串outFileName=DB_路径+DB_名称;
OutputStream myOutput=新文件OutputStream(outFileName);
//将字节从输入文件传输到输出文件
字节[]缓冲区=新字节[1024];
整数长度;
而((长度=myInput.read(缓冲区))>0){
写入(缓冲区,0,长度);
}
//关闭溪流
myOutput.flush();
myOutput.close();
myInput.close();
}
@凌驾
公共同步作废关闭(){
if(myDataBase!=null)
myDataBase.close();
super.close();
}
@凌驾
public void onCreate(SQLiteDatabase db){
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
}
公共字符串getAll()
{
字符串str=“”;
//选择所有查询
String selectQuery=“按名称从两周订单中选择名称”;
SQLiteDatabase db=this.getReadableDatabase();
试一试{
Cursor Cursor=db.rawQuery(selectQuery,null);
试一试{
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
//int i=0;
做{
返回cursor.getString(0);
}while(cursor.moveToNext());
}
}最后{
尝试{cursor.close();}捕获(异常忽略){}
}
}最后{
尝试{db.close();}捕获(异常忽略){}
}
返回str;
}

您正在使用
this.getReadableDatabase();
创建一个新的空数据库,然后尝试使用
copyDataBase();
覆盖它?我认为应该是另一种方法