Flutter sqlite sync mysql

Flutter is a popular mobile app development framework that allows developers to create high-quality native interfaces for iOS and Android. SQLite is a self-contained, serverless, zero-configuration, transactional SQL database engine that is frequently used in mobile applications. On the other hand, MySQL is a powerful and widely-used open-source relational database management system (RDBMS).

To synchronize SQLite with MySQL in a Flutter app, you can follow these steps:

Step 1: Set up the SQLite database in Flutter

To use SQLite in a Flutter app, you need to add the ‘sqflite’ package as a dependency in your pubspec.yaml file:

dependencies:
  sqflite: ^2.0.0
  path: ^1.8.0

Then, you can import the necessary packages in your Dart file:

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

Next, you can create and access the SQLite database using the ‘openDatabase’ method. Here’s an example:

Future<Database> openDatabase() async {
  final databasePath = await getDatabasesPath();
  final path = join(databasePath, 'my_database.db');
  return await openDatabase(
    path,
    version: 1,
    onCreate: (db, version) {
      // Create tables if they don't exist
      db.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)');
    },
  );
}

Step 2: Set up the MySQL connection

To establish a connection with a MySQL server in Flutter, you can use the ‘mysql1’ package. Add it as a dependency in your pubspec.yaml file:

dependencies:
  mysql1: ^0.24.0

Then, import the package in your Dart file:

import 'package:mysql1/mysql1.dart';

You can create a MySQL connection using the ‘ConnectionSettings’ class and the ‘MySqlConnection.connect()’ method. Make sure to provide the appropriate host, port, username, password, and database name. Here’s an example:

Future<MySqlConnection> openConnection() async {
  final settings = ConnectionSettings(
    host: 'your_host',
    port: 3306,
    user: 'your_username',
    password: 'your_password',
    db: 'your_database',
  );

  final connection = await MySqlConnection.connect(settings);
  return connection;
}

Step 3: Sync SQLite data with MySQL

Now that you have both the SQLite database and the MySQL connection set up, you can synchronize the data between them. Here’s an example:

Future syncData() async {
  final sqliteDb = await openDatabase();
  final mysqlConnection = await openConnection();

  // Retrieve data from SQLite
  final sqliteData = await sqliteDb.query('users');

  // Insert or update data in MySQL
  for (var row in sqliteData) {
    await mysqlConnection.query(
      'INSERT INTO users (id, name) VALUES (?, ?) ON DUPLICATE KEY UPDATE name = ?',
      [row['id'], row['name'], row['name']],
    );
  }

  // Close the connections
  await sqliteDb.close();
  await mysqlConnection.close();
}

In this example, we retrieve the user data from the SQLite database and insert it into the MySQL database. If a user with the same ID already exists in the MySQL database, the ‘ON DUPLICATE KEY UPDATE’ statement updates the user’s name.

Step 4: Call the syncData() method

Finally, you can call the ‘syncData()’ method whenever you want to synchronize the data between SQLite and MySQL. For example:

void main() async {
  await syncData();

  // Other app logic...
}

This ensures that the data stays consistent between the two databases.

Remember to handle exceptions, error handling, and other considerations as per your app’s requirements.

Leave a comment