{"id":2735,"date":"2024-12-12T20:51:18","date_gmt":"2024-12-12T11:51:18","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=2735"},"modified":"2024-12-12T20:51:18","modified_gmt":"2024-12-12T11:51:18","slug":"sqldelight-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2024\/12\/12\/2735\/","title":{"rendered":"SQLDelight \uc0ac\uc6a9\ud558\uae30"},"content":{"rendered":"\n<p>SQLDelight\ub294 DB\ub97c \ub2e4\ub8e8\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uba74\uc11c ROOM\uacfc\ub294 \ubc18\ub300\ub85c \uc791\ub3d9\ud55c\ub2e4. ROOM\uc740 DB\ub97c \ub2e4\ub8e8\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uba74, \uc5ec\uae30\uc11c \uc548\uc804\ud55c SQL Query\ub97c \ub9cc\ub4e4\uc5b4 \uc900\ub2e4\uba74, SQLDelight\ub294 SQLQuery\ub97c \uc791\uc131\ud558\uba74, \uc774\ub85c\ubd80\ud130 typesafe\ud558\uace0 \uc548\uc804\ud558\uac8c \uc0ac\uc6a9\uac00\ub2a5\ud55c Kotlin API\ub97c \uc0dd\uc131\ud574\uc900\ub2e4. \ubb50\uac00 \ub354 \uc88b\uc740\uc9c0\ub294 \uc120\ud0dd\uc5d0 \ub2ec\ub824\uc788\ub294\ub370, SQLDelight\uac00 \uc21c\uc218\ud558\uac8c Kotlin\ubca0\uc774\uc2a4\ub77c\ub294 \uc810\uc5d0\uc11c KMP(Kotlin Multi-Platform)\uac1c\ubc1c\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ub418\ub294 \uac83\uc73c\ub85c \ubcf4\uc778\ub2e4. <\/p>\n\n\n\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc120 \uc6b0\uc120 \ud50c\ub7ec\uadf8\uc778\uc774 \ud544\uc694\ud558\ub2e4. \ubc84\uc804 \uce74\ud0c8\ub85c\uadf8\ub97c \uc0ac\uc6a9\ud558\ub294 \uae30\uc900\uc73c\ub85c  libs.versions.toml \uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \uad00\ub828 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud574\uc900\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[versions]\n...\nsqldelight = &quot;2.0.2&quot;\n\n...\n[plugins]\n...\nsqldelight = { id = &quot;app.cash.sqldelight&quot;, version.ref = &quot;sqldelight&quot; }\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[versions]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">sqldelight <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;2.0.2&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[plugins]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">sqldelight <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { id <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;app.cash.sqldelight&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;sqldelight&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>build.gradle.kts \uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \ud50c\ub7ec\uadf8\uc778\uc744 \ucd94\uac00\ud574\uc900\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"plugins {\n...\n    alias(libs.plugins.sqldelight)\n}\n...\nsqldelight {\n    databases {\n        create(&quot;Database&quot;) {\n            packageName.set(&quot;net.batmask.sqldelighttest01&quot;)\n        }\n    }\n}\n\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCBDFB\">plugins<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">alias<\/span><span style=\"color: #ADBAC7\">(libs.plugins.sqldelight)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCBDFB\">sqldelight<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">databases<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #DCBDFB\">create<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;Database&quot;<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            packageName.<\/span><span style=\"color: #DCBDFB\">set<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;net.batmask.sqldelighttest01&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>sqldelight { } \ube14\ub7ed\uc774 \ub208\uc5d0 \ub744\ub294\ub370, \ub300\ucda9 \uc77d\ud788\ub4ef DB\uc0dd\uc131\uc5d0 \ub300\ud55c \uac83\uc774\uace0 \uc571\uc758 \ud328\ud0a4\uc9c0 \uba85\uc744 \uc368\uc8fc\uba74 \ub41c\ub2e4. <\/p>\n\n\n\n<p>\uc55e\uc5d0\uc11c \uae30\uc220\ud588\ub4ef, sqldelight\ub294 SQL\ubb38\uc744 \uc791\uc131\ud558\uba74 \uc774\ub97c Kotlin API\ub85c \ub9cc\ub4e4\uc5b4\uc900\ub2e4. \ub514\ud3f4\ud2b8\ub85c SQLDelight \ud50c\ub7ec\uadf8\uc778\uc740 sqldelight \ud3f4\ub354\uc548\uc5d0 \uc788\ub294 .sq\ud30c\uc77c\ub4e4\uc744 \ucc3e\uac8c \ub418\uc5b4 \uc788\ub2e4. \uc791\uc131\uc911\uc778 \ud328\ud0a4\uc9c0\uc758 src\/main\/ \ubc11\uc5d0 sqldelight \ud3f4\ub354\ub97c \ub9cc\ub4e4\uace0 \uac70\uae30\uc5d0 .sq\ud30c\uc77c\uc744 \uc791\uc131\ud55c\ub2e4. \uc544\ub798 \ud30c\uc77c\uc744 Player.sq \uc774\ub984\uc73c\ub85c \uc791\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE hockeyPlayer (\n  player_number INTEGER PRIMARY KEY NOT NULL,\n  full_name TEXT NOT NULL\n);\n\nCREATE INDEX hockeyPlayer_full_name ON hockeyPlayer(full_name);\n\nINSERT INTO hockeyPlayer (player_number, full_name)\nVALUES (15, 'Ryan Getzlaf');\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">CREATE<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">TABLE<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">hockeyPlayer<\/span><span style=\"color: #ADBAC7\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  player_number <\/span><span style=\"color: #F47067\">INTEGER<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">PRIMARY KEY<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">NOT NULL<\/span><span style=\"color: #ADBAC7\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  full_name <\/span><span style=\"color: #F47067\">TEXT<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">NOT NULL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">CREATE<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">INDEX<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">hockeyPlayer_full_name<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">ON<\/span><span style=\"color: #ADBAC7\"> hockeyPlayer(full_name);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">INSERT INTO<\/span><span style=\"color: #ADBAC7\"> hockeyPlayer (player_number, full_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">VALUES<\/span><span style=\"color: #ADBAC7\"> (<\/span><span style=\"color: #6CB6FF\">15<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&#39;Ryan Getzlaf&#39;<\/span><span style=\"color: #ADBAC7\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud558\uace0 \uc778\ub371\uc2a4\ub97c \uc0dd\uc131, \ub610 \ucd08\uae30 \ub370\uc774\ud130\ub97c \ucd94\uac00\ud558\ub294 \uc791\uc5c5\uae4c\uc9c0 \uac00\ub2a5\ud558\ub2e4. <\/p>\n\n\n\n<p>\uc774\ub807\uac8c \uc0dd\uc131\ub41c DB\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 \ud50c\ub7ab\ud3fc\uc5d0 \ub9de\ub294 \ub4dc\ub77c\uc774\ubc84\uac00 \ud544\uc694\ud558\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc\ub77c\uba74, \ub2e4\uc74c\uc758 \ub4dc\ub77c\uc774\ubc84\ub97c toml\ud30c\uc77c\uacfc build.gradle.kts\uc5d0 \ucd94\uac00\ud574\uc900\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[libraries]\n...\nandroid-driver = { group = &quot;app.cash.sqldelight&quot;, name = &quot;android-driver&quot;, version.ref = &quot;sqldelight&quot; }\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[libraries]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">android<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">driver <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> { group <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;app.cash.sqldelight&quot;<\/span><span style=\"color: #ADBAC7\">, name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;android-driver&quot;<\/span><span style=\"color: #ADBAC7\">, version.ref <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;sqldelight&quot;<\/span><span style=\"color: #ADBAC7\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"...\nimplementation(libs.android.driver)\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">..<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCBDFB\">implementation<\/span><span style=\"color: #ADBAC7\">(libs.android.driver)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ub4dc\ub77c\uc774\ubc84 \ucd94\uac00\ud6c4, \ucf54\ub4dc \ub0b4\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"val driver: SqlDriver = AndroidSqliteDriver(Database.Schema, context, &quot;test.db&quot;)\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> driver: <\/span><span style=\"color: #F69D50\">SqlDriver<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">AndroidSqliteDriver<\/span><span style=\"color: #ADBAC7\">(Database.Schema, context, <\/span><span style=\"color: #96D0FF\">&quot;test.db&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Database\ub294 build.gradle.kts\uc5d0 \uae30\uc220\ud588\ub358 sqldelight\ube14\ub7ed\uc5d0 \uc788\ub294 create()\ub85c \uba85\uc2dc\ub41c DB\uba85\uc774\ub2e4. \uc774\uac83\uc740 sqldelight \ud50c\ub7ec\uadf8\uc778\uc5d0 \uc758\ud574 \ub3d9\uc77c\ud55c \uba85\uc758 \ud074\ub798\uc2a4\uac00 \uc0dd\uc131\ub418\uba70, \uc5ec\uae30\uc5d0 \uc55e\uc11c \uae30\uc220\ud55c SQL Schema\ub4e4\uc774 \ucf54\ud2c0\ub9b0 \ucf54\ub4dc\ub85c \ud3ec\ud568\ub418\uc5b4\uc788\ub2e4. \uc774\ub97c Database.Schema\ub85c \uc804\ub2ec\ud558\uace0 \uc788\ub294 \uac83\uc774\ub2e4. \ub450\ubc88\uc9f8 \uc778\uc790\uc778 context\ub294 android application\uc758 context\ub97c \uc804\ub2ec\ud558\uba70, \ub9c8\uc9c0\ub9c9\uc740 \uc2e4\uc81c\ub85c \uc0dd\uc131\ub420 DB\uc758 \uc774\ub984\uc774\ub2e4. <\/p>\n\n\n\n<p>\uc774\uc81c \uc5ec\uae30\uc5d0 DB\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud55c \ucffc\ub9ac\ub4e4\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub2e4. \uc55e\uc11c \uc791\uc131\ud588\ub358 Player.sq\ud30c\uc77c\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd94\uac00\uac00 \uac00\ub2a5\ud558\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"selectAll:\nSELECT *\nFROM hockeyPlayer;\n\ninsert:\nINSERT INTO hockeyPlayer(player_number, full_name)\nVALUES (?, ?);\n\ninsertFullPlayerObject:\nINSERT INTO hockeyPlayer(player_number, full_name)\nVALUES ?;\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">selectAll:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">SELECT <\/span><span style=\"color: #F47067\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">FROM hockeyPlayer;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">insert:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">INSERT INTO <\/span><span style=\"color: #DCBDFB\">hockeyPlayer<\/span><span style=\"color: #ADBAC7\">(player_number, full_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCBDFB\">VALUES<\/span><span style=\"color: #ADBAC7\"> (?, ?);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">insertFullPlayerObject:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">INSERT INTO <\/span><span style=\"color: #DCBDFB\">hockeyPlayer<\/span><span style=\"color: #ADBAC7\">(player_number, full_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">VALUES ?;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p> \uc774\ub807\uac8c \ud558\uba74, Queries \uc624\ube0c\uc81d\ud2b8\uac00 \uac01 sq\ud30c\uc77c\ub9c8\ub2e4 \uc0dd\uc131\ub418\ub294\ub370, \uc704 \ud30c\uc77c \uc774\ub984\uc774 Player.sq\uc600\uc73c\ubbc0\ub85c PlayerQueries \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub41c\ub2e4. \uac01 \ucffc\ub9ac\uc5d0 \ub808\uc774\ube14\uc744 \uc4f0\uace0 \ucf5c\ub860(:)\uc744 \ubd99\uc774\uace0 \uc788\ub2e4. \uadf8\ub9ac\uace0 \ucffc\ub9ac\uac00 \uae30\uc220\ub418\uace0 \uc788\ub294\ub370, \uc774 \ub808\uc774\ube14\uc740 \uac01\uac01 \uc2e4\uc81c \uc0ac\uc6a9\uac00\ub2a5\ud55c \ud568\uc218\uba85\uc774 \ub418\uace0, \uc774\ub294 \uc774 \uc624\ube0c\uc81d\ud2b8\uc758 \uba64\ubc84\ub4e4\ub85c \ud3ec\ud568\ub41c\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub807\uac8c \uc0dd\uc131\ub41c \ucffc\ub9ac\uc5d0 \ub300\ud55c \ucf54\ud2c0\ub9b0 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"fun doDatabaseThings(driver: SqlDriver) {\n  val database = Database(driver)\n  val playerQueries: PlayerQueries = database.playerQueries\n\n  println(playerQueries.selectAll().executeAsList()) \n  \/\/ [HockeyPlayer(15, &quot;Ryan Getzlaf&quot;)]\n\n  playerQueries.insert(player_number = 10, full_name = &quot;Corey Perry&quot;)\n  println(playerQueries.selectAll().executeAsList()) \n  \/\/ [HockeyPlayer(15, &quot;Ryan Getzlaf&quot;), HockeyPlayer(10, &quot;Corey Perry&quot;)]\n\n  val player = HockeyPlayer(10, &quot;Ronald McDonald&quot;)\n  playerQueries.insertFullPlayerObject(player)\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">doDatabaseThings<\/span><span style=\"color: #ADBAC7\">(driver: <\/span><span style=\"color: #F69D50\">SqlDriver<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> database <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">Database<\/span><span style=\"color: #ADBAC7\">(driver)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> playerQueries: <\/span><span style=\"color: #F69D50\">PlayerQueries<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> database.playerQueries<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">println<\/span><span style=\"color: #ADBAC7\">(playerQueries.<\/span><span style=\"color: #DCBDFB\">selectAll<\/span><span style=\"color: #ADBAC7\">().<\/span><span style=\"color: #DCBDFB\">executeAsList<\/span><span style=\"color: #ADBAC7\">()) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #768390\">\/\/ [HockeyPlayer(15, &quot;Ryan Getzlaf&quot;)]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  playerQueries.<\/span><span style=\"color: #DCBDFB\">insert<\/span><span style=\"color: #ADBAC7\">(player_number <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">10<\/span><span style=\"color: #ADBAC7\">, full_name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;Corey Perry&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">println<\/span><span style=\"color: #ADBAC7\">(playerQueries.<\/span><span style=\"color: #DCBDFB\">selectAll<\/span><span style=\"color: #ADBAC7\">().<\/span><span style=\"color: #DCBDFB\">executeAsList<\/span><span style=\"color: #ADBAC7\">()) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #768390\">\/\/ [HockeyPlayer(15, &quot;Ryan Getzlaf&quot;), HockeyPlayer(10, &quot;Corey Perry&quot;)]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> player <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">HockeyPlayer<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">10<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;Ronald McDonald&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  playerQueries.<\/span><span style=\"color: #DCBDFB\">insertFullPlayerObject<\/span><span style=\"color: #ADBAC7\">(player)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ucf54\ub4dc\ub97c \ubcf4\uba74, Database\uc5d0 \uc55e\uc5d0\uc11c \uc0dd\uc131\ud55c \ub4dc\ub77c\uc774\ubc84\ub97c \ub118\uaca8 DB\uc5d0 \ub300\ud55c \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0 \uc788\ub2e4. \ub610\ud55c, \uc55e\uc5d0\uc11c \ub9d0\ud55c\ub300\ub85c \uc0dd\uc131\ub41c PlayerQueries \uac1d\uccb4\ub97c \uc774 database\ub85c\ubd80\ud130 \ucc38\uc870\ud55c\ub2e4. \uc774\ub85c\ubd80\ud130 \uac01 \ucffc\ub9ac\ud568\uc218\ub4e4\uc744 \uc790\uc720\ub86d\uac8c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\uae30\ubcf8\uc801\uc778 \uc0ac\uc6a9\ubc29\ubc95\uc740 \uc774\uc640 \uac19\uace0, \ub2e4\ub978 \ud50c\ub7ab\ud3fc\uc774\ub098 \ucd94\uac00\uc801\uc778 API\ub4e4\uc740 \uacf5\uc2dd \uc0ac\uc774\ud2b8\ub97c \ucc38\uc870\ud558\uae30 \ubc14\ub780\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/sqldelight.github.io\/sqldelight\/2.0.2\">https:\/\/sqldelight.github.io\/sqldelight\/2.0.2<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>SQLDelight\ub294 DB\ub97c \ub2e4\ub8e8\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uba74\uc11c ROOM\uacfc\ub294 \ubc18\ub300\ub85c \uc791\ub3d9\ud55c\ub2e4. ROOM\uc740 DB\ub97c \ub2e4\ub8e8\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uba74, \uc5ec\uae30\uc11c \uc548\uc804\ud55c SQL Query\ub97c \ub9cc\ub4e4\uc5b4 \uc900\ub2e4\uba74, SQLDelight\ub294 SQLQuery\ub97c \uc791\uc131\ud558\uba74, \uc774\ub85c\ubd80\ud130 typesafe\ud558\uace0 \uc548\uc804\ud558\uac8c \uc0ac\uc6a9\uac00\ub2a5\ud55c Kotlin API\ub97c \uc0dd\uc131\ud574\uc900\ub2e4. \ubb50\uac00 \ub354 \uc88b\uc740\uc9c0\ub294 \uc120\ud0dd\uc5d0 \ub2ec\ub824\uc788\ub294\ub370, SQLDelight\uac00 \uc21c\uc218\ud558\uac8c Kotlin\ubca0\uc774\uc2a4\ub77c\ub294 \uc810\uc5d0\uc11c KMP(Kotlin Multi-Platform)\uac1c\ubc1c\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ub418\ub294 \uac83\uc73c\ub85c \ubcf4\uc778\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc120 \uc6b0\uc120 \ud50c\ub7ec\uadf8\uc778\uc774 \ud544\uc694\ud558\ub2e4. \ubc84\uc804 \uce74\ud0c8\ub85c\uadf8\ub97c \uc0ac\uc6a9\ud558\ub294 \uae30\uc900\uc73c\ub85c libs.versions.toml \uc5d0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,34],"tags":[102,410,411],"class_list":["post-2735","post","type-post","status-publish","format-standard","hentry","category-android","category-kotlin","tag-basic","tag-sqldelight","tag-411"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=2735"}],"version-history":[{"count":30,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2735\/revisions"}],"predecessor-version":[{"id":2792,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2735\/revisions\/2792"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=2735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=2735"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=2735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}