在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Android 開發(fā):關于 SQLDelight 入門

    簡介

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

    比起支持跨平臺這一特點,SQLDelight 有一個更為重要的特點:它能夠將 SQL 代碼轉換為 Kotlin、Java 或者原生代碼,從而支持 Android、iOS、Web 等不同的平臺。

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

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

    但是說實話,開發(fā)者開發(fā)一個移動端應用程序時,就算對 SQL 的基礎編程方法和語法了解地不深入,也可以寫出 SQL 代碼并運行編譯。

    集成

    把 SQLDelight 插件添加到項目級 Gradle 文件中,如下面的代碼所示:

    // 頂級構建文件,可以在其中添加所有子項目/模塊的通用配置選項。buildscript { ext.kotlin_version = “1.4.32” repositories { google() jcenter() // SQLDelight 支持存儲庫 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}

    第二步,需要在應用級 Gradle 文件上應用 SQLDelight 插件來支持代碼生成。 SQLDelight 不會基于 kapt 這樣的注釋處理器來生成代碼。

    生成特定平臺的代碼的過程之所以有效,是因為最終執(zhí)行的都是 SQL 查詢,在某種程度上,這與 Room 數(shù)據(jù)庫等平臺特定庫是相似的。看看下面的代碼:

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

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

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

    編寫 SQL 代碼

    寫 SQL 代碼來創(chuàng)建數(shù)據(jù)庫,首先應該定位 *.sq 文件。在 main 目錄下創(chuàng)建一個名為 sqldelight 的單獨目錄(類似于 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;

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

    Android 代碼

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

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

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

    val queries = Database(androidSqlDriver).movieItemQueries

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

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

    協(xié)程支持

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

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

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

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

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

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

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

    現(xiàn)在來觀察這個查詢,我們可以使用 RxJava 擴展構件,如下所示:

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

    這就是目前的全部內容,希望你能有所收獲。

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

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

    相關推薦

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

      本文主要講的是ios手游模擬器,以及和手游模擬器ios相關的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 哪個iOS模擬器能多開手游賬號?可以推薦個好用的模擬器給我嗎…

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

      由于覺得京東平臺的物流效勞十分的不錯,而且商品的質量都比擬有保證。在京東平臺購物的話,普通多久時間會到貨?下面的內容停止引見。 京東普通多久到貨? 詳細要看發(fā)貨地址和你所在的地址的…

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

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

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

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

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

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

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

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

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

      近日,我國“探索二號”科考船攜深海浮游式移動作業(yè)平臺與中繼器,赴南海開展海上試驗。該平臺完成了1500米級、2500米級、4500米級三個由淺到深級別的海試驗證,最大工作深度達到4…

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

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

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

      不知不覺已經寫了24篇文章,加上這篇是第25篇了,都是自己這幾年來用過的營銷方法,如果遇到有些不懂的,我會咨詢我的朋友和同事幫忙,盡量讓每一篇有價值,哪怕是對大家有一點點幫助也行,…

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

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

      2022年11月24日

    聯(lián)系我們

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