我正在研究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>
答案 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”错误。