5

How do you check whether a database exists before creating a table for the database in Flutter using sqflite?

E.g., if I'm to create the database doggie_database.db, how do I prematurely check its existence within table creation?

final Future<Database> database = openDatabase(
  // Set the path to the database. 
  join(await getDatabasesPath(), 'doggie_database.db'),
  // When the database is first created, create a table to store dogs.
  onCreate: (db, version) {
    // Run the CREATE TABLE statement on the database.
    return db.execute(
      "CREATE TABLE dogs(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)",
    );
  },
  // Set the version. This executes the onCreate function and provides a
  // path to perform database upgrades and downgrades.
  version: 1,
);
knoxgon
  • 1,070
  • 2
  • 15
  • 31
evergreen
  • 681
  • 10
  • 22

1 Answers1

12

You can check if a database exists with databaseExists(String path).

https://github.com/tekartik/sqflite/blob/master/sqflite/lib/sqflite.dart (line 174)

/// Check if a database exists at a given path.
///
Future<bool> databaseExists(String path) =>
    databaseFactory.databaseExists(path);

But I think you are concerned with the CREATE TABLE statement being called again. You should not worry about this if you specify the version. Internally the version is kept and onCreate isn't called if it's already specified.

From the same file:

/// If [version] is specified, [onCreate], [onUpgrade], and [onDowngrade] can
/// be called. These functions are mutually exclusive — only one of them can be
/// called depending on the context, although they can all be specified to
/// cover multiple scenarios
///
/// [onCreate] is called if the database did not exist prior to calling
/// [openDatabase]. You can use the opportunity to create the required tables
/// in the database according to your schema
dumazy
  • 13,857
  • 12
  • 66
  • 113
  • what the `version` means exactly? – evergreen Jul 28 '19 at 10:49
  • 2
    It's a way to help with database migrations. When updating your app, the code is updated, but the database stays the same. In the onUpgrade callback, you have an oldVersion param as well. You can then check "if my old version was 2, and my new version is 3, I need to alter this table" – dumazy Jul 28 '19 at 11:07