教師データの足りてないAI
MySQL寝てる問題を乗り越え、再びFlutterでの本題に戻る。つまりこれ。
なんせ2fileしかない、ビデオ6分しかない。速攻写経。もちろん繋ぐデータベースが違うので、その辺は少し書き直す。
- 元・ボタンを押したら社員ID10番の人のメールアドレスを取ってきて表示。
- 新・ボタンを押したら845年に起こった事件名を取ってきて表示。
て、変えたのはこれだけ。Androidstudioには赤も黄色もない。ちゃんとUIもあるからsimulator起動して、ビルド。画面出た。さあ、ボタンを押してみよう。
・・・変化なし(>_<)
さあ困った。エラーが出るのは辛いが、それでも、エラーだとわかる。検索もできる。が、ビルドは通っていて、ボタンも生きていて、consoleにはconnectedと表示されているけど、見本でメールアドレスが表示されるところに、・・・・なにも出ない。
試しにSequelAceを見てみる。「クエリの状態:エラーはありませんでした」と書かれているだけで、だれかに接続されたぞとか、変なこと頼まれたぞ、とか、機嫌を損ねているようでもない。
ともかく今回も、接続はできた(connectedって表示されたからね)らしい。前回の公式サンプルでも、繋いでテーブルを作るところまではできてた。前回は新しいデータを挿入できずに、エラー文がいっぱい出たところで放置。今回は「取ってきて表示」ができない。公式サンプルでは挿入の後になる「取ってきて表示」と見比べて、ぜんぜん同じことをしてる気分のしないコードを見比べる。あ、似てるところもあるか。
これが公式。
// Query the database using a parameterized query
var results = await conn.query(
'select name, email, age from users where id = ?', [result.insertId]);
for (var row in results) {
print('Name: ${row[0]}, email: ${row[1]} age: ${row[2]}');
}
こっちが今日のビデオのGitHub。Flutterサンプルのカウンターアプリで、「ボタン押したらインクリメント」を「ボタン押したらクエリ」に変えてあるだけらしい。
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
var db = new Mysql();
var mail = '';
void _getCustomer() {
db.getConnection().then((conn) {
String sql = 'select mail from company.customer where id = 10;';
conn.query(sql).then((results) {
for(var row in results){
setState(() {
mail = row[0];
});
}
});
conn.close();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'mail:',
),
Text(
'$mail',
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _getCustomer,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
基礎力のない私には、このたった二つのサンプルから正解を見つけることはできない。ので、教師データ三つ目、明日は間にphpが挟まってるヤツに挑戦しよう。