繋がって、書き直して、書き加えて、読み出す。
昨日は「MySQL5.7なら動くmysql1プロジェクトをmysql_client風に書き換える」という方向で行ったけれど、今日は逆コース、MySQL8で動いているmysql_clientのサンプルをflutterのカウンターアプリ風に書き換える。
何が違うか、というと、前者はfileが2枚、後者はペライチ。こっちのfileにあるべきものがあっちに行って、こっちで呼べてない、系のミスを、まだまだ私は自己解決できないので、ペライチはもしかして一つの解決策かも知れないと思うのだ。
とはいえ、ペライチは何がイヤかといったら、fileが長い。ここに貼ったらウザイだろうなあ、と思うほど長い。でも、貼っちゃう。笑
import 'package:flutter/material.dart';
import 'package:mysql_client/mysql_client.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter MySQL Demo',
theme: ThemeData(
primarySwatch: Colors.green,
),
home: const MyHomePage(title: 'Flutter MySQL Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<void> _defi() async {
print("Connecting to mysql server...");
// create connection
final conn = await MySQLConnection.createConnection(
host: "127.0.0.1",
port: 3306,
userName: "root",
password: "*****",
databaseName: "aetatum", // optional
);
await conn.connect();
print("Connected");
// update some rows
var res = await conn.execute(
"UPDATE users SET age = :age WHERE id = 2",
{"age": 57},
);
print(res.affectedRows);
// insert some rows
res = await conn.execute(
"INSERT INTO users (id, name, email, age) VALUES (:id, :name, :email, :age)",
{
"id": null,
"name": "Jane",
"email": "jane@jane.com",
"age": "24",
},
);
print(res.affectedRows);
// make query
var result = await conn.execute("SELECT * FROM users");
// print some result data
print(result.numOfColumns);
print(result.numOfRows);
print(result.lastInsertID);
print(result.affectedRows);
// print query result
for (final row in result.rows) {
// print(row.colAt(0));
// print(row.colByName("title"));
// print all rows as Map<String, String>
print(row.assoc());
}
// close all connections
await conn.close();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'Push button to move:',
),
Text(
style: Theme.of(context).textTheme.headline4,
'これなら動く?'
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _defi,
tooltip: 'vas-y',
child: const Icon(Icons.add),
),
);
}
}
conn.closeがエラーじゃなくなっている。これがペライチ効果だろう。
が、最初はonPressedのところが昨日と同じエラーだった。なので沈思黙考の後、関数の引数指定を止めてみた。と、表面的にはエラーが消える。
では、いってみましょう。行け!
動かん。
行け、行け、行け〜!(連打)
行ったわ、最後まで。
しかも、連打したので、consoleに大量のプリントが出た。新規登録のJaneさんはIDだけどんどん自動でインクリメントしながら、大量に登録された。
次は落ち着いて、一回だけクリック。ちゃんと動くじゃん。またJaneさんが増えてしまった。
すると何? 私はm1macに対してさえ、気が短すぎると?
まあいいか。
明日はなんとかして、select結果をリスト表示したい〜!