每次运行我的应用程序时都会创建Android数据库

时间:2015-07-24 20:12:09

标签: android sqlite

我是Android应用程序开发的新手,我正在创建一个创建数据库的应用程序。我对此有一些疑问。

  1. 每次启动我的应用程序时,我的应用程序都会创建一个新数据库,还是会使用以前的数据库。

  2. 如果有,那么如何停止并使用以前的数据库。

  3. 我正在使用物理设备来运行我的应用而不是使用模拟器...我如何查看我的数据库在哪里

  4. 以下是我的代码

    public class ExternalDbOpenHelper extends SQLiteOpenHelper {
        public static final String DB_Name = "mydatabase";
        public static final String Table_Name = "Records";
    
        public ExternalDbOpenHelper(Context context) {
            super(context, DB_Name, null, 1);
            SQLiteDatabase db = this.getWritableDatabase();
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("create table " + Table_Name + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, col1 text) ");
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("Drop table if exists " + Table_Name);
        }
    }
    

4 个答案:

答案 0 :(得分:2)

每次启动应用时都不会破坏您的数据库。但是,一旦你更新了数据库版本号,因为现在你可以使用drop table。

就查看数据库而言,当您将手机连接到计算机时,您应该能够在ADB中看到您的设备,并且数据库文件将存储在您的包名称文件夹中。

然后,您可以在任何数据库查看器(Sequel Pro等)中打开该文件。如果您正在使用Android Studio,我相信您可以在Android设备监视器中的工具 - >下完成所有这些操作。的Android

答案 1 :(得分:2)

您的数据库是在您第一次使用时创建的。 Android使用后来的相同数据库文件。

即使在升级数据库版本后,它本身也不会被删除,会发生什么取决于

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    //here you can migrate your data or just drop all tables
}

要在没有root的真实设备上查看数据库,您可以使用另一个线程中提供的方法:android adb, retrieve database using run-as

如果您在模拟器上运行您的应用程序,您可以直接看到数据库文件。

答案 2 :(得分:0)

@Tushar saha如果你想稍微试验一下,那么继续在sdk等级23或以下的模拟器上安装你的应用程序在sdk等级25及以上有一些问题,然后安装SqliteBrowser工具进行浏览D B。 要打开DB文件,请转到Tools-> Android - > Android设备监视器

在Android设备监视器内选择DDMS模式在左窗格中选择您的设备,然后在文件管理器中选择数据 - >数据 - >包名称 - >数据库 - > databasefile.db然后将该文件导出到您的计算机设备并使用上面的工具导入此文件,现在您将能够看到db中的所有表。 (目前只有1分贝,因为sqlite的缺点是你不能拥有多个数据库)。

然后在第一种情况下,每次登录时都执行create db query,而另一次只执行一次,然后查看数据库是否存在。

注意:如果您在物理设备上安装应用程序,则无法在filemanager中查看数据,您需要具有sdk等级23或更低版本的模拟器。

答案 3 :(得分:0)

某些答案使数据库中的表模糊了数据库的含义。

每次启动应用程序时,都不会破坏数据库。它会 但是,一旦您更新数据库版本号,就会因为 现在将其与放置表放在一起。

我不认为数据库会在OP的“ onUpgrade”方法中被破坏,只是数据库中的一个表会被破坏并重新创建-这是一个非常不同的概念,因为不应将版本号重置为0。 / p>

我也想更好地理解这一点,尤其是在使用Android Developer 3.6模拟器时。无论我将什么版本号传递给构造函数中的SQLiteOpenHelper super()语句,似乎都将重新创建数据库文件并调用onCreate()而不是onUpgrade()。我希望模拟器以某种方式持久化数据库文件,因此如果我在模拟器中使用新的数据库版本运行应用程序,则该行为将调用onUpgrade()。可能与运行模拟器有关,无论是完全重新安装包括数据库文件的应用程序,还是只是更新应用程序软件。我是Android的新手,所以学习。