如何检查Android中是否存在数据库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查Android中是否存在数据库?相关的知识,希望对你有一定的参考价值。

我正在使用Room API在我的android应用中实现数据库。似乎每次加载我的应用程序时,它都会尝试一次又一次地创建数据库。有没有办法限制这个?

 db = Room.databaseBuilder(context, AppDatabase.class, "database-name").build();
答案

当你创建数据库时,它会在应用程序启动时调用它们的db create.you用于下面的app活动中的代码,并且该活动调用应用程序类调用中的manifest文件,如下面的代码所示。

public class AppActivity extends Application 

AppDatabase db;

@Override
public void onCreate() 
    super.onCreate();
    db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();


public AppDatabase getDatabase() 
    return db;

并添加以下行清单文件..在应用程序标记中添加以下行

        android:name="AppActivity"
另一答案

您可以获取db中的实体数量(TODO应用程序 - 示例)。实体> 0。

class App: Application() 
    override fun onCreate() 
        super.onCreate()
        instance = this
        database = Room.databaseBuilder(applicationContext,
            AppDatabase::class.java, "database").build()
    
    companion object 
        lateinit var instance: App
        lateinit var database: AppDatabase
    

// DB类

 @Database(entities = [Task::class], version = 1, exportSchema = false)
       abstract class AppDatabase : RoomDatabase() 
       abstract fun taskDao(): TaskDao

// Dao界面

   @Dao
    interface TaskDao 
        @Query("SELECT COUNT(id) FROM tasks")
        fun getTasksCount(): Int
    

//模型

@Entity(indices = [Index(value = ["title"], unique = true)], tableName ="tasks")
    class Task(
        var title: String = "",
        var description: String = "",
        var date: Date,
        @Embedded 
        var remind: Constants.RemindPeriod = Constants.RemindPeriod.MIN5,
        @Embedded
        var prior: Priority) : Serializable 
        @PrimaryKey(autoGenerate = true)
        var id: Long = 0

// CHECKDB

 private fun checkDatabaseState() 
        doAsync 
            val db = App.database
            val entityCount = db.taskDao().getTasksCount().or(0)
            isDatabaseNotEmpty = entityCount > 0
        
      
另一答案

您正在使用db,实际上是一个文件。您可以检查,如果存在,此方法可能会有所帮助:

private static boolean doesDatabaseExist(Context context, String dbName) 
    File dbFile = context.getDatabasePath(dbName);
    return dbFile.exists();

另一答案

试试这个

if (!db.exists()) 
    // Database does not exist so copy it from assets here
    Log.i("Database", "Not Found");
 else 
    Log.i("Database", "Found");

以上是关于如何检查Android中是否存在数据库?的主要内容,如果未能解决你的问题,请参考以下文章

检查Android代码中是不是存在用户名

Android检查数据库是不是存在

通过 Android 中的内容提供程序检查数据库表是不是存在

Android SQL:检查数据库中的记录是不是存在

带有 Sqlite 的 Android - 如何检查表是不是存在以及是不是为空

如何检查文件是不是存在于android设备的特定文件夹中