{"id":569,"date":"2019-12-09T21:29:22","date_gmt":"2019-12-09T12:29:22","guid":{"rendered":"http:\/\/www.typea.info\/blog\/index.php\/2019\/12\/09\/flutter_sqlite\/"},"modified":"2020-04-27T23:02:04","modified_gmt":"2020-04-27T14:02:04","slug":"flutter_sqlite","status":"publish","type":"post","link":"https:\/\/www.typea.info\/blog\/index.php\/2019\/12\/09\/flutter_sqlite\/","title":{"rendered":"Flutter : sqlite\u306e\u5229\u7528"},"content":{"rendered":"<p>Flutter + Firebase \u3067\u30a2\u30d7\u30ea\u4f5c\u6210\u306e\u305f\u3081\u306e\u30d1\u30fc\u30c4\u3042\u3064\u3081\u3002<\/p>\n<h3>1.\u3053\u3053\u307e\u3067\u306b\u78ba\u8a8d\u3057\u305f\u3053\u3068<\/h3>\n<ol>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/10\/03\/xamarin_flutter\">Flutter+Firebase\u74b0\u5883\u8a2d\u5b9a<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/10\/03\/flutter\">\u753b\u9762\u9077\u79fb<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/10\/03\/flutter_dialog\">Dialog<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/10\/03\/flutter_httpclient\">Http\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/10\/21\/flutter_androidx\">AndroidX\u5bfe\u5fdc<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/10\/21\/flutter_1\">\u753b\u50cf\u306e\u9078\u629e<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/10\/22\/flutter_2\">\u753b\u50cf\u306e\u5207\u308a\u629c\u304d<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2019\/11\/03\/flutter_http_postjson\">HTTP POST\u3068\u7d50\u679cJSON\u306e\u51e6\u7406<\/a><\/li>\n<\/ol>\n<h3>2.\u4eca\u56de\u306e\u78ba\u8a8d<\/h3>\n<p>sqlite\u306e\u5229\u7528<\/p>\n<p><a href=\"https:\/\/pub.dev\/packages\/sqflite\">sqflite \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u5229\u7528<\/a><\/p>\n<p><a href=\"https:\/\/pub.dev\/packages\/sqflite\">sqflite\u306e\u30da\u30fc\u30b8\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u898b\u306a\u304c\u3089\u30b3\u30fc\u30c9\u3092\u8a18\u8ff0\u3057\u3001\u52d5\u4f5c\u78ba\u8a8d<\/a><\/p>\n<pre class=\"prettyprint linenums\">import 'package:path\/path.dart';\nimport 'package:sqflite\/sqflite.dart';\nclass DbTest {\n  void firstDbTest() async {\n    \/\/ OS\u306a\u3069\u74b0\u5883\u5225\u306eDB\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9\u3092\u53d6\u5f97\u3059\u308b\n    var dbPath = await getDatabasesPath();\n    \/\/ DB\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\n    dbPath = join(dbPath, 'demo.db');\n    print(\"DB Path $dbPath\");\n\n    var helper = MemoProvider();\n    Database db = await helper.open(dbPath);\n\n    print(\"DB: ${db.toString()}\");\n\n    var list = await helper.getAll();\n    if (list.length &lt; 10) {\n      var newMemo = Memo();\n      newMemo.memo = \"Memo ${DateTime.now()}\";\n      helper.insert(newMemo);\n    }\n\n    for(Memo memo in list) {\n      print(\"MEMO : ${memo.toMap().toString()}\");\n    }\n  }\n}\n\nclass MemoMeta {\n  static String tableName = \"Memo\";\n  static String columnId = \"_id\";\n  static String columnMemo = \"memo\";\n\n  static List&lt;String&gt; columns() {\n    return [columnId, columnMemo];\n  }\n}\n\nclass Memo {\n  int id;\n  String memo;\n\n  Map&lt;String, dynamic&gt; toMap() {\n    var map = &lt;String, dynamic&gt; {\n      MemoMeta.columnMemo: memo\n    };\n    if (id != null) {\n      map[MemoMeta.columnId] = id;\n    }\n    return map;\n  }\n\n  Memo();\n\n  Memo.fromMap(Map&lt;String, dynamic&gt; map) {\n    id = map[MemoMeta.columnId];\n    memo = map[MemoMeta.columnMemo];\n  }\n}\n\nclass MemoProvider {\n  Database db;\n\n  Future&lt;Database&gt; open(String path) async {\n    var ddl = \"\"\"\ncreate table ${MemoMeta.tableName} (\n  ${MemoMeta.columnId} integer primary key autoincrement,\n  ${MemoMeta.columnMemo} text not null )\n\"\"\";\n    print(\"DDL: $ddl\");\n\n    db = await openDatabase(path, version: 1,\n      onCreate: (Database db, int version) async {\n        await db.execute(ddl);\n      }\n    );\n    return db;\n  }\n\n  Future&lt;Memo&gt; insert(Memo memo) async {\n    memo.id = await db.insert(MemoMeta.tableName, memo.toMap());\n    return memo;\n  }\n\n  Future&lt;List&lt;Memo&gt;&gt; getAll() async {\n    List&lt;Map&gt; maps = await db.query(\n        MemoMeta.tableName,\n        columns : MemoMeta.columns());\n    var list = new List&lt;Memo&gt;();\n    for(Map map in maps) {\n      list.add(Memo.fromMap(map));\n    }\n    return list;\n  }\n\n  Future&lt;Memo&gt; findById(int id) async {\n    List&lt;Map&gt; maps = await db.query(MemoMeta.tableName,\n      columns: MemoMeta.columns(),\n      where: '${MemoMeta.columnId} = ?',\n      whereArgs: [id]);\n    if (maps.length &gt; 0) {\n      return Memo.fromMap(maps.first);\n    }\n    return null;\n  }\n\n  Future&lt;int&gt; delete(int id) async {\n    return await db.delete(\n        MemoMeta.tableName, where: '${MemoMeta.columnId} = ?', whereArgs: [id]);\n  }\n\n  Future&lt;int&gt; update(Memo memo) async {\n    return await db.update(MemoMeta.tableName, memo.toMap(),\n      where: '${MemoMeta.columnId} = ?', whereArgs: [memo.id]);\n  }\n\n  Future close() async =&gt; db.close();\n\n}\n<\/pre>\n<p>\u30ed\u30b0\u306b\u51fa\u529b\u3055\u308c\u305f\u3002<\/p>\n<pre class=\"prettyprint linenums\">I\/flutter ( 3116): DB Path \/data\/user\/0\/info.typea.favo_phrase_trial\/databases\/demo.db\nI\/flutter ( 3116): DDL: create table Memo (\nI\/flutter ( 3116):   _id integer primary key autoincrement,\nI\/flutter ( 3116):   memo text not null )\nI\/flutter ( 3116): DB: 2 \/data\/user\/0\/info.typea.favo_phrase_trial\/databases\/demo.db\nV\/AudioManager( 3116): playSoundEffect   effectType: 0\nV\/AudioManager( 3116): querySoundEffectsEnabled...\nI\/flutter ( 3116): MEMO : {memo: Memo 2019-12-09 21:18:12.816597, _id: 1}\nI\/flutter ( 3116): MEMO : {memo: Memo 2019-12-09 21:18:17.761803, _id: 2}<\/pre>\n<p><a href=\"https:\/\/www.amazon.co.jp\/%E5%9F%BA%E7%A4%8E%EF%BC%86%E5%BF%9C%E7%94%A8%E5%8A%9B%E3%82%92%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E8%82%B2%E6%88%90%EF%BC%81Android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-Kotlin%E5%AF%BE%E5%BF%9C-%E3%81%AA%E3%82%93%E3%81%A1%E3%82%83%E3%81%A3%E3%81%A6%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AB%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%9F%E8%B7%B5%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3-CodeZine-BOOKS\/dp\/479816044X\/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=android&amp;qid=1575894499&amp;sr=8-8&amp;linkCode=li2&amp;tag=typea09-22&amp;linkId=cda993ef9b24137307c3c3faa13edea9&amp;language=ja_JP\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"\/\/ws-fe.amazon-adsystem.com\/widgets\/q?_encoding=UTF8&amp;ASIN=479816044X&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=typea09-22&amp;language=ja_JP\" border=\"0\"><\/a><img loading=\"lazy\" decoding=\"async\" width=\"1\" height=\"1\" style=\"margin: 0px !important; border: currentcolor !important; border-image: none !important;\" alt=\"\" src=\"https:\/\/ir-jp.amazon-adsystem.com\/e\/ir?t=typea09-22&amp;language=ja_JP&amp;l=li2&amp;o=9&amp;a=479816044X\" border=\"0\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Flutter + Firebase \u3067\u30a2\u30d7\u30ea\u4f5c\u6210\u306e\u305f\u3081\u306e\u30d1\u30fc\u30c4\u3042\u3064\u3081\u3002 1.\u3053\u3053\u307e\u3067\u306b\u78ba\u8a8d\u3057\u305f\u3053\u3068 Flutter+Firebase\u74b0\u5883\u8a2d\u5b9a \u753b\u9762\u9077\u79fb Dialog Http\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 AndroidX\u5bfe\u5fdc \u753b\u50cf\u306e\u9078 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","_veu_custom_css":"","veu_display_promotion_alert":"","vkexunit_cta_each_option":"","footnotes":""},"categories":[111],"tags":[],"class_list":["post-569","post","type-post","status-publish","format-standard","hentry","category-flutter"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=569"}],"version-history":[{"count":1,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/569\/revisions"}],"predecessor-version":[{"id":738,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/569\/revisions\/738"}],"wp:attachment":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}