我在我的Android应用程序中创建了数据库,然后插入了一个语句。一切正常,所以我想从MY_PACKAGE / databses /获取我的数据库,并将其复制到SD卡以便可以访问。
这很有用,但是当我尝试使用我的sqlite Firefox插件打开时,我收到此错误:
SQLiteManager: Error in opening file Datas.sqlite - either the file is encrypted or corrupt
Exception Name: NS_ERROR_FILE_CORRUPTED
Exception Message: Component returned failure code: 0x8052000b (NS_ERROR_FILE_CORRUPTED) [mozIStorageService.openUnsharedDatabase]
也许我必须打开其他东西,否则我不能轻易打开它?
我将提供我使用的所有代码:
处理我的db我使用了所有这些代码:
Using your own SQLite database in Android applications
将此方法复制到SD卡:
public static boolean backUpDataBase(Context context) {
final String DATABASE_NAME = "Data.sqlite";
final String DATABASE_NAME_FULL = "/data/data/package/databases/"
+ DATABASE_NAME;
boolean result = true;
// Source path in the application database folder
String appDbPath = DATABASE_NAME_FULL;
// Destination Path to the sdcard app folder
String sdFolder = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/" + "Datas.sqlite";
File f = new File(sdFolder);
// if (!f.exists()) {
// f.mkdir();
// }
InputStream myInput = null;
OutputStream myOutput = null;
try {
// Open your local db as the input stream
myInput = new FileInputStream(appDbPath);
// Open the empty db as the output stream
myOutput = new FileOutputStream(f);
// 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);
}
} catch (IOException e) {
result = false;
e.printStackTrace();
} finally {
try {
// Close the streams
if (myOutput != null) {
myOutput.flush();
myOutput.close();
}
if (myInput != null) {
myInput.close();
}
} catch (IOException e) {
}
}
return result;
}
我的数据库如下所示: 2桌:
CREATE TABLE "Test" ("_id" INTEGER PRIMARY KEY NOT NULL UNIQUE , "Info" TEXT)
CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US')
代码可以完成我需要的所有工作:
//返回读写数据库 DataBaseHelper dataBase = Main.createOrOpenDB(mContext);
Main.backUpDataBase(mContext);
db = dataBase.myDataBase;
// Step 1: Inflate layout
setContentView(R.layout.tabs_fragment_activity);
try{
db.execSQL("INSERT INTO " +"Test" +" Values ('1','Inserted');");
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
那么哪里出错了,因为插入工作正常?
答案 0 :(得分:0)
听起来您的代码中存在将其写入SD卡的问题(我没有立即看到)。
我想知道,你为什么要把它复制到SD卡?听起来你只想检查文件......
如果这实际上是你的目标,那么我建议运行模拟器并简单地使用eclipse中的DDMS视图,导航到文件并单击右上角的工具提示“从设备中提取文件”的按钮”。您在模拟器中获得的内容应该与手机上的内容完全相同。
答案 1 :(得分:0)