データベース使ってみた
- これまでローカルファイルでやってたけど、だんだん面倒になってきたからデータベース使うことにした。
- 何がいいかわかんないけど、MySQL にした(初めて触った笑)。
まだ解決してない問題
下記のコードでやったんだけど、非同期処理がうまくいってない。
※多分 riverpod で管理するなら、loading で処理できると思ってる。
var conn = await MySqlConnection.connect( settings );
出力結果
flutter: connected!!
flutter: 2.1. added
flutter: +------+--------+-------+------------------------------+
flutter: | id | user | age | email |
flutter: |2 |Taro |25 |X.cm |
flutter: |0 |banana |25 |Ta1r@.com |
flutter: |1 |yamada |26 |Ta2r@.com |
flutter: |2 |hanako |28 |Ta3f@.com |
flutter: |3 |aaa |20 |Ta4r@.com |
ソース
例によって、コメント書きまくってるから説明なしで。
import 'package:flutter/material.dart';
import 'package:mysql1/mysql1.dart';
// database table
// user
// +-------------------------+
// | id | name | age | email |
void main() async {
var res;
// 0. MySQL の設定
var settings = ConnectionSettings(
host : "localhost",
port : 3306,
user : "root",
password : "XXXXX",
db : "fluttertest",
);
// 1. MySQL データベースに接続する
var conn = await MySqlConnection.connect( settings );
debugPrint( "connected!!" );
// 2. データの追加
// 2.1. 1つ追加
res = await conn.query( // id を受け取ることもある
'insert into user(id, name, age, email) values(?, ?, ?, ?);', // 命令文
[ 2, "Taro", "25", "X.cm" ] // ? の引数
);
debugPrint( "2.1. added" );
// 2.2. 一括追加
// リスト形式で一括追加する
res = await conn.queryMulti(
"insert into user (id, name, age, email) values (?, ?, ?, ?);",
[
[ 0, "banana", 25, "Ta1r@.com" ],
[ 1, "yamada", 26, "Ta2r@.com" ],
[ 2, "hanako", 28, "Ta3f@.com" ],
[ 3, "aaa" , 20, "Ta4r@.com" ],
]
);
// 3. データベースから取得
res = await conn.query( "SELECT * FROM user" );
debugPrint( "+------+--------+-------+------------------------------+" );
debugPrint( "| id | user | age | email |" );
for ( var r in res ) {
String id = r[0].toString().padRight(6);
String user = r[1].toString().padRight(8);
String age = r[2].toString().padRight(7);
String email = r[3].toString().padRight(30);
debugPrint( "|$id|$user|$age|$email|" );
}
// 4. 接続終了
await conn.close();
}