如何从android手机中把自己的数据库给COPY出来

如何从android手机中把自己的数据库给COPY出来,第1张

自己的应用复制自己的数据,无需root,直接文件复制就行,大概如下:

File f = new File("/data/data/应用的包名/databases/数据库名")//比如 "/data/data/com.hello/databases/test.db"

String sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath()

File o = new File(sdcardPath+"cp.db")//sdcard上的目标地址

if(f.exists()) {

FileChannel outF

try {

outF = new FileOutputStream(o).getChannel()

new FileInputStream(f).getChannel().transferTo(0, f.length(),outF)

} catch (FileNotFoundException e) {

e.printStackTrace()

} catch (IOException e) {

e.printStackTrace()

}

Toast.makeText(mainpage.this, "完成", Toast.LENGTH_SHORT).show()

}

// 检查数据库是否有效

private boolean checkDataBase() {

// SQLiteDatabase checkDB = null

// String myPath = DB_PATH + DB_NAME

File file = new File(DB_PATH, DB_NAME)

return file.exists()

}

public DBCtrl(Context context) {

super()

synchronized (lock) {

this.context = context

DB_PATH = context.getResources().getString(R.string.dbpath)

boolean dbExist = checkDataBase()

if (dbExist) {

// 数据库已存在,do nothing.

} else {

// 创建数据库

try {

File dir = new File(DB_PATH)

if (!dir.exists()) {

dir.mkdirs()

}

File dbf = new File(DB_PATH + DB_NAME)

if (dbf.exists()) {

dbf.delete()

}

// SQLiteDatabase.openOrCreateDatabase(dbf, null)

// 复制asseets中的db文件到DB_PATH下

copyDataBase()

} catch (IOException e) {

throw new Error("数据库创建失败")

}

}

}

}

private void copyDataBase() throws IOException {

// Open your local db as the input stream

InputStream myInput = context.getResources()

.openRawResource(R.raw.db)

// Path to the just created empty db

String outFileName = DB_PATH + DB_NAME

// Open the empty db as the output stream

OutputStream myOutput = new FileOutputStream(outFileName)

// transfer bytes from the inputfile to the outputfile

byte[] buffer = new byte[1024]

int length

while ((length = myInput.read(buffer)) >0) {

myOutput.write(buffer, 0, length)

}

// Close the streams

myOutput.flush()

myOutput.close()

myInput.close()

// }

}

我用的这个 构造 helper时候没有数据库就复制了

我觉得你失败的原因不是复制有问题而是数据太大了

android2.3以前不能直接读大于1m的资源的

你把数据库分割成小块复制过来时拼起来吧

android 数据库文件复制并不一定要创建数据库然后插入数据的过程。譬如,需要提供一个大数据量资源的搜索功能。像号码归属地,城市列表,ip归属地等。此时如果键数据库,再将数据一条一条insert到数据库中,不仅耗时,占用资源,有时还会导入错误。

1、将数据库建好,数据insert好,并将该beifen.db文件放在raw(如果没有,在res目录下建一个)目录下。在创建数据库时,直接将该文件拷贝到databases目录下:DATABASES_DIR="/data/data/yourpackagedir/databases", DATABASE_NAME="beifen.db"。

2、可以在运行ContentProvider的query(一般拷贝数据库都是用于查询的)时,做一次拷贝检测

[java] view plaincopyprint?

copyDatabaseFile(context, false)

如果该文件没有,则拷贝,如果有,不拷贝。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9627812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存