#mysql #flutter #oop #dart
#mysql #flutter #ооп #dart
Вопрос:
Я немного застрял на получении переменной «conn» в «insertregistration», чтобы я записывал соединение с базой данных только один раз и не повторял его для каждого запроса.
import 'dart:async';
import 'package:mysql1/mysql1.dart';
class Database {
MySqlConnection conn;
connection() async {
conn = await MySqlConnection.connect(ConnectionSettings(
host: 'x',
port: x,
user: 'x',
db: 'x',
password: 'x'));
}
dynamic insertregistration(String username, String password, String email, String nome, String nascita) async {
conn = connection().conn;
var result = await conn.query('insert into user (username,password,email,nome,nascita,iscrizione) values (?, ?, ?, ?, ?, ?)', ['$username', '$password', '$email', '$nome', '$nascita', '2020-10-21']);
await conn.close();
}
}
Это было одно из моих многих опробованных решений, но, очевидно, оно не работает
Как я могу сделать? Заранее спасибо 🙂
Ответ №1:
Я бы предложил преобразовать класс базы данных в одноэлементный.
Чтобы решить вашу проблему, вам нужно вызвать connection и дождаться его, а затем выполнить запрос.
dynamic insertregistration(String username, String password, String email, String nome, String nascita) async {
await this.connection();
var result = await conn.query('insert into user (username,password,email,nome,nascita,iscrizione) values (?, ?, ?, ?, ?, ?)', ['$username', '$password', '$email', '$nome', '$nascita', '2020-10-21']);
await conn.close();
}
Для одноэлементной реализации я бы выбрал что-то вроде этого:
import 'dart:async';
import 'package:mysql1/mysql1.dart';
class Database {
MySqlConnection conn;
Database._privateConstructor() {
}
static final Database instance = Database._privateConstructor();
Future<void> initConnection() async {
this.conn = await MySqlConnection.connect(ConnectionSettings(
host: 'x',
port: x,
user: 'x',
db: 'x',
password: 'x'));
}
dynamic insertregistration(String username, String password, String email, String nome, String nascita) async {
await this.initConnection();
var result = await this.conn.query(
'insert into user (username,password,email,nome,nascita,iscrizione) values (?, ?, ?, ?, ?, ?)',
['$username', '$password', '$email', '$nome', '$nascita', '2020-10-21']
);
await conn.close();
}
}
И для использования синглтона вы будете использовать его следующим образом:
Database.instance.insertRegistration(sername, password, email, nome, nascita);