Reputation: 763
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,
);
Upvotes: 6
Views: 8074
Reputation: 14435
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
Upvotes: 14