如何将数据库文件复制到android中的sdcard

时间:2012-04-04 04:40:38

标签: android cordova

  

可能重复:
  How to backup database file to sdcard on android?

我正在研究phonegap 1.3.0。我在phonegap中创建了名为test.db的数据库,该数据库存储在data / data /(pakage name)/test.db中。我使用原生的android代码将数据库复制到sdcard(mnt / sdcard)。但它给出了test.db不存在的错误。该设备没有root权限。我缺少什么?

提前致谢。

代码如下 - >

public void copyfile(String srFile, String dtFile) throws FileNotFoundException{
    String DBPATH = "/data/data/package_name/databases/";
     String DBNAME = "test.db";
     String myPath = DBPATH + DBNAME;

    //Open your local db as the input stream
    File externalStorage = Environment.getExternalStorageDirectory();

    InputStream myInput = new FileInputStream(myPath);

    // Path to the just created empty db
    String outFileName = "/mnt/sdcard/folder/test.db";

    //Open the empty db as the output stream
    OutputStream myOutput;
    try {
    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();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
}

手机密码如下:

<!DOCTYPE html>

  

<script type="text/javascript" charset="utf-8" src="phonegap-1.3.0.js"></script>


 <script type="text/javascript" charset="utf-8">
 db = window.openDatabase("test", "1.0", "PhoneGap Demo", 200000);
function createDB() {
    db.transaction(populateDB);
}
function populateDB(tx) {
    Field17=document.form.Field17.value;
    Field18=document.form.Field18.value;
    Field19=document.form.Field19.value;
    //tx.executeSql('DROP TABLE IF EXISTS INFO');
    tx.executeSql('CREATE TABLE IF NOT EXISTS INFO (pid integer primary key, field17,field18,field19');
    sql = "INSERT INTO INFO (field17,field18,field19) VALUES ( '" + Field17 + "','" + Field18 + "','" + Field19 + "')";
    tx.executeSql(sql);
    db.transaction(queryDB);
}


function queryDB(tx,results) {
    console.log("inside querydb");
    tx.executeSql('SELECT * FROM INFO', [], querySuccess);
}

function querySuccess(tx, results) {     
var len = results.rows.length;
    alert('rows inserted: ' + len);
    if (len > 0) {
        for (var i=0;i<len;i++) {

            console.log('pid: ' + results.rows.item(i).pid + 'field: ' + results.rows.item(i).field17 + ' field: ' + results.rows.item(i).field18+ ' field ' + results.rows.item(i).field19);

        }
    }
}       


</script>

2 个答案:

答案 0 :(得分:1)

你不需要手机根。检查权限  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

你可以检查文件

File dbFile = new File(DB_PATH + DB_NAME);
        if(dbFile.exists()){
                  //Continue

编辑:测试此代码。在sdcard中更改您的pakage名称和yourFoler

public boolean checkDataBase() {
    File dbFile = new File(DB_PATH + DB_NAME);
    return dbFile.exists();
}

public void copyfile(String srFile, String dtFile) throws FileNotFoundException{
    private static String DB_NAME = "dictionary.db";
    private static String DB_PATH = "/data/data/com.app.android.dictionary/databases/";
if(checkDataBase()){
InputStream myInput = new FileInputStream(DB_PATH + DB_NAME);

    // Path to the just created empty db
    String outFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/foler/" + DB_NAME;

    //Open the empty db as the output stream
    OutputStream myOutput;
    try {
    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();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

}
}

答案 1 :(得分:0)

应用程序不创建数据库,实际上它是由Android系统创建的,数据库的文件权限是 -rw-rw ---- 。这意味着只有用户和组可以访问它,在这种情况下,两者都是系统。所以你的程序无权访问,因此你得到了“Permission Denied”错误。