自从我两个月前开始使用我的应用以来,我一直在使用Android数据库遇到很多麻烦...我经历了很多教程,但只回答了几个问题...我放弃了使用我的(真实的) )设备数据库,因为我无法访问它,所以我开始使用模拟器。但奇怪的事情发生了。我有这门课:
public class DatabaseHandler extends SQLiteOpenHelper
{
@Override
public void onCreate(SQLiteDatabase database)
{
database.execSQL(sql_command);
}
}
每当我卸载应用程序时,应该从(虚拟)设备中完全删除数据库,对吗?但是当我重新安装它并在execSQL()行中放置一个断点时(在执行该方法之前),我可以通过SQLite Manager选项卡看到数据库与以前一样:类别表只有_id,名称,描述,current_level和status。
当前的sql命令是(注意Category表中的新图像列):
create table categories(
_id integer primary key autoincrement,
name text not null,
description text not null,
current_level integer DEFAULT 0,
status integer DEFAULT 0,
image text not null);
create table levels(
_id integer primary key autoincrement,
category_id integer not null,
level integer,
total_questions integer,
answered_questions integer DEFAULT 0,
correct_answers integer DEFAULT 0,
time integer DEFAULT 0);
不仅插入了图像列,而且水平表也没有显示在数据库中。此外,当我运行execSQL()方法时,logcat选项卡上没有显示任何内容。
顺便说一句,我使用的是Ubuntu 12.10,Eclipse Juno和Android 2.2!
答案 0 :(得分:0)
每当我卸载应用程序时,应该从(虚拟)设备中完全删除数据库,对吗?
如果您实际上正在卸载它,并且数据库位于内部存储上的正常位置,那么是。
请注意,仅运行修改后的应用程序不会卸载旧版本。 替换旧版本,但所有数据都保持不变。
要删除内部存储上的现有数据库,您可以:
真正卸载该应用,或
在设置
如果您更改了SQLiteOpenHelper
将数据库放在外部存储上的行为,那么只有在getExternalFilesDir()
,getExternalCacheDir()
或某些数据库中,数据库才会在卸载时删除那些子目录。如果将数据库放在外部存储的根目录中,则卸载后数据库将保持不变。
此外,当我运行execSQL()方法时,logcat选项卡上没有显示任何内容。
在上面显示的代码中,您没有将任何内容记录到LogCat。
答案 1 :(得分:0)
我不知道虚拟设备 - 但这是我用来从我的设备访问我的数据库
我在创建数据库之后把它放在其中一个活动中
if (COPY_DB) {
try {
File sd = Environment.getExternalStorageDirectory();
String databaseName ="myDbName";
if (sd.canWrite()) {
String currentDBPath = Environment.getDataDirectory() + "/data/" + getPackageName() + "/databases/"+databaseName;
String backupDBPath =
Environment.getExternalStorageDirectory().getPath() +"/"+ databaseName+".db";
Log.d(TAG,"backupPath : "+backupDBPath);
File currentDB = new File(currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (!backupDB.getParentFile().exists()) {
backupDB.getParentFile().mkdirs();
}
if (currentDB.exists()) {
FileInputStream fisc = new FileInputStream(currentDB);
FileOutputStream fosc = new FileOutputStream(backupDB);
FileChannel src = fisc.getChannel();
FileChannel dst = fosc.getChannel();
dst.transferFrom(src, 0, src.size());
fisc.close();
fosc.close();
src.close();
dst.close();
}
}
} catch (Exception e) {
Log.e(TAG, "error", e);
}
我打开命令行并转到我要将数据库下载到
的文件夹并写
c:\Dev\pulledFiles>adb pull the_path_of_the_file_from_the_log
这假设您的adb有一个环境变量,如果它没有,而不是adb,您需要指定它的整个路径,通常是/ platform-tools / adb
之后我在像SQLiteBroswer这样的数据库阅读器中打开数据库(尽管broswer非常多) 祝你好运!