亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Android 開(kāi)發(fā):關(guān)于 SQLDelight 入門

                簡(jiǎn)介

                SQLDelight 是一個(gè)跨平臺(tái)數(shù)據(jù)庫(kù),它與傳統(tǒng)的注釋處理和反射生成代碼的方式完全相反。

                比起支持跨平臺(tái)這一特點(diǎn),SQLDelight 有一個(gè)更為重要的特點(diǎn):它能夠?qū)?SQL 代碼轉(zhuǎn)換為 Kotlin、Java 或者原生代碼,從而支持 Android、iOS、Web 等不同的平臺(tái)。

                就算使用諸如 Room 數(shù)據(jù)庫(kù)之類的傳統(tǒng)的、平臺(tái)特定的庫(kù),也可以僅用 SQL 這一門語(yǔ)言輕松地創(chuàng)建數(shù)據(jù)庫(kù)表和操作。

                SQLDelight 需要開(kāi)發(fā)者能自己編寫 SQL 查詢,這既是 SQLDelight 的優(yōu)勢(shì)也是它的劣勢(shì)。作為一名 Android 開(kāi)發(fā)人員,我不喜歡編寫除了 Kotlin/Java 以外的代碼,但另一方面,它給了我支持跨平臺(tái)的機(jī)會(huì)。

                但是說(shuō)實(shí)話,開(kāi)發(fā)者開(kāi)發(fā)一個(gè)移動(dòng)端應(yīng)用程序時(shí),就算對(duì) SQL 的基礎(chǔ)編程方法和語(yǔ)法了解地不深入,也可以寫出 SQL 代碼并運(yùn)行編譯。

                集成

                把 SQLDelight 插件添加到項(xiàng)目級(jí) Gradle 文件中,如下面的代碼所示:

                // 頂級(jí)構(gòu)建文件,可以在其中添加所有子項(xiàng)目/模塊的通用配置選項(xiàng)。buildscript { ext.kotlin_version = “1.4.32” repositories { google() jcenter() // SQLDelight 支持存儲(chǔ)庫(kù) mavenCentral() maven { url ‘https://www.jetbrains.com/intellij-repository/releases’ } maven { url “https://jetbrains.bintray.com/intellij-third-party-dependencies” } } dependencies { classpath “com.android.tools.build:gradle:4.1.3” classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” // SQL Delight 插件 classpath ‘com.squareup.sqldelight:gradle-plugin:1.5.0’ }}allprojects { repositories { google() jcenter() }}task clean(type: Delete) { delete rootProject.buildDir}

                第二步,需要在應(yīng)用級(jí) Gradle 文件上應(yīng)用 SQLDelight 插件來(lái)支持代碼生成。 SQLDelight 不會(huì)基于 kapt 這樣的注釋處理器來(lái)生成代碼。

                生成特定平臺(tái)的代碼的過(guò)程之所以有效,是因?yàn)樽罱K執(zhí)行的都是 SQL 查詢,在某種程度上,這與 Room 數(shù)據(jù)庫(kù)等平臺(tái)特定庫(kù)是相似的??纯聪旅娴拇a:

                plugins { id ‘com.android.application’ id ‘kotlin-android’ id ‘com.squareup.sqldelight’}

                上面的操作已經(jīng)集成了通用的 SQLDelight 支持,現(xiàn)在需要添加 Android 支持庫(kù) —— AndroidSqliteDriver ,在依賴項(xiàng)節(jié)點(diǎn)應(yīng)用程序級(jí) Gradle 文件下添加以下代碼:

                implementation “com.squareup.sqldelight:android-driver:1.3.0”

                編寫 SQL 代碼

                寫 SQL 代碼來(lái)創(chuàng)建數(shù)據(jù)庫(kù),首先應(yīng)該定位 *.sq 文件。在 main 目錄下創(chuàng)建一個(gè)名為 sqldelight 的單獨(dú)目錄(類似于 Java 和 Kotlin 代碼的文件夾),并將所有的 *.sq 文件存放其中。

                src/main/sqldelight

                緊接著,創(chuàng)建 MovieItem.sql 文件,然后把下面的代碼添加到該文件中:

                CREATE TABLE moveItem ( name TEXT NOT NULL UNIQUE PRIMARY KEY, image TEXT NOT NULL, rating INTEGER NOT NULL DEFAULT 0);selectAll:SELECT *FROM moveItemORDER BY name;insertOrReplace:INSERT OR REPLACE INTO moveItem ( name, image, rating)VALUES (?, ?, ?);selectByName:SELECT *FROM moveItemWHERE name = ?;empty:DELETE FROM moveItem;

                添加了上述代碼后,將會(huì)彈出提示安裝 SQLDelight Android Studio 插件。這不是強(qiáng)制性的,但它可以讓你更容易理解 SQL 語(yǔ)法。我建議安裝該插件。

                Android 代碼

                如上文所述,我們需要用 AndroidSqliteDriver 把數(shù)據(jù)寫進(jìn) Android 數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)在應(yīng)用程序啟動(dòng)期間持續(xù)存在。首先,創(chuàng)建 AndroidSqliteDriver 實(shí)例:

                val androidSqlDriver = AndroidSqliteDriver( schema = Database.Schema, context = applicationContext, name = “movies.db”)

                接著,需要獲取在 MovieItem.sql 文件中創(chuàng)建的查詢語(yǔ)句。代碼如下:

                val queries = Database(androidSqlDriver).movieItemQueries

                然后,直接執(zhí)行 MovieItem.sql 文件中的 selectAll 函數(shù),代碼如下:

                val movies: List = queries.selectAll().executeAsList()Log.d(“MovieDatabase”, “Movies : $movies”)

                協(xié)程支持

                Room 庫(kù)成功背后的主要原因之一是它易于使用,而且與 coroutines 和 paging 等流行框架相兼容。

                SQLDelight 也有這個(gè)好處;我們只需要在應(yīng)用程序級(jí)別的 Gradle 文件的 dependencies 節(jié)點(diǎn)下添加以下這行代碼就可以了:

                implementation “com.squareup.sqldelight:coroutines-extensions-jvm:1.5.0”

                現(xiàn)在就像在 Room 庫(kù)中使用協(xié)程一樣簡(jiǎn)單。代碼如下:

                val players: Flow = queries.selectAll() .asFlow() .mapToList()

                如果你仍在使用 RxJava,那么你可以添加下面這行代碼,以便將 RxJava 支持集成到 SQLDelight 中:

                implementation “com.squareup.sqldelight:rxjava3-extensions:1.5.0”

                現(xiàn)在來(lái)觀察這個(gè)查詢,我們可以使用 RxJava 擴(kuò)展構(gòu)件,如下所示:

                val players: Flow = queries.selectAll() .asObservable() .mapToList()

                這就是目前的全部?jī)?nèi)容,希望你能有所收獲。

                作者:披著狼皮的羊_鏈接:https://juejin.cn/post/7111246458895990792

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月21日 21:03
                下一篇 2022年6月21日 21:03

                相關(guān)推薦

                • ios手游模擬器(手游模擬器ios)

                  本文主要講的是ios手游模擬器,以及和手游模擬器ios相關(guān)的知識(shí),如果覺(jué)得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 哪個(gè)iOS模擬器能多開(kāi)手游賬號(hào)?可以推薦個(gè)好用的模擬器給我嗎…

                  2022年11月27日
                • 京東快遞跨省幾天能到(京東一般多久到貨)

                  由于覺(jué)得京東平臺(tái)的物流效勞十分的不錯(cuò),而且商品的質(zhì)量都比擬有保證。在京東平臺(tái)購(gòu)物的話,普通多久時(shí)間會(huì)到貨?下面的內(nèi)容停止引見(jiàn)。 京東普通多久到貨? 詳細(xì)要看發(fā)貨地址和你所在的地址的…

                  2022年11月26日
                • 游戲平臺(tái)有哪些(游戲平臺(tái)有哪些)

                  簡(jiǎn)要回答 游戲平臺(tái)指的是多人通過(guò)互聯(lián)網(wǎng)在線游戲的平臺(tái),例如qq游戲,聯(lián)眾世界,浩方電競(jìng)平臺(tái),VS競(jìng)技游戲平臺(tái)等,只要你下載平臺(tái),下載相關(guān)游戲,就能實(shí)現(xiàn)對(duì)戰(zhàn),擺脫了局域網(wǎng)的限制。 詳…

                  2022年11月25日
                • 淘寶直播庫(kù)存哪里拿貨(淘寶哪里看庫(kù)存)

                  近年倆直播帶貨越來(lái)越火爆,抖音、淘寶、拼多多等平臺(tái)都有直播帶貨功能,其中淘寶直播時(shí)主流帶貨平臺(tái),一些小伙伴也紛紛加入,但是作為新手不知道淘寶直播庫(kù)存哪里拿貨?下面小編為大家?guī)?lái)淘寶…

                  2022年11月25日
                • 淘寶直播沒(méi)有貨源怎么解決(淘寶直播沒(méi)有貨源怎么辦)

                  淘寶是很多人喜歡的購(gòu)物【平臺(tái),里面的活躍用戶很多,流量很大,所以不少商家在上面開(kāi)店,為了提高銷量也會(huì)開(kāi)通直播帶貨,也有一些主播沒(méi)有貨源,那么淘寶直播沒(méi)有貨源怎么解決?下面小編為大家…

                  2022年11月25日
                • 抖音帶貨怎么做入門(抖音帶貨怎么做入門教學(xué))

                  相信很多小伙伴都有注意到,現(xiàn)在抖音已經(jīng)成為大家最常光顧的一個(gè)平臺(tái)了,作為一個(gè)日活破億的流量池,如今抖音上的用戶數(shù)量極大。因此,現(xiàn)在在抖音上帶貨、賣貨的人也是越來(lái)越多了,那么想在抖音…

                  2022年11月25日
                • 4308米!“探索二號(hào)”科考船攜深海浮游式作業(yè)平臺(tái)完成海試

                  近日,我國(guó)“探索二號(hào)”科考船攜深海浮游式移動(dòng)作業(yè)平臺(tái)與中繼器,赴南海開(kāi)展海上試驗(yàn)。該平臺(tái)完成了1500米級(jí)、2500米級(jí)、4500米級(jí)三個(gè)由淺到深級(jí)別的海試驗(yàn)證,最大工作深度達(dá)到4…

                  2022年11月25日
                • 手機(jī)上怎么買世界杯彩票(手機(jī)上怎么買世界杯輸贏)

                  現(xiàn)在手機(jī)已經(jīng)成為大家生活中非常重要的工具之一,只要一部手機(jī)就可以解決衣食住行,最近世界杯火熱進(jìn)行,一些小伙伴想要買彩票,那么,手機(jī)上可以買世界杯彩票嗎?世界杯買球軟件是真的嗎?手機(jī)…

                  2022年11月25日
                • 博客營(yíng)銷的3大優(yōu)勢(shì)解析(博客營(yíng)銷怎么做)

                  不知不覺(jué)已經(jīng)寫了24篇文章,加上這篇是第25篇了,都是自己這幾年來(lái)用過(guò)的營(yíng)銷方法,如果遇到有些不懂的,我會(huì)咨詢我的朋友和同事幫忙,盡量讓每一篇有價(jià)值,哪怕是對(duì)大家有一點(diǎn)點(diǎn)幫助也行,…

                  2022年11月25日
                • 閑魚上賣貨怎么快速賺錢(閑魚賣貨怎么快速賣出)

                  閑魚這個(gè)平臺(tái)由于主要是做二手交易的,因此入駐門檻要比其他電商平臺(tái)低很多,而且流量也比較大。所以現(xiàn)在選擇在閑魚上賣貨的人也是比較多的,只要你選擇好賣的產(chǎn)品,一般人都是可以在閑魚這個(gè)平…

                  2022年11月24日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息