SLICK+SQLITE+SCALA

本項目成立的原因主要是爲了使用SCALA操作SQLITE數據庫,完成日期:2015.12.17,所用工具版本皆爲官方最新,源碼名稱:***_sqlite_codeGen
svn:svn://192.168.1.30/ganghang_sqlite
SQLite JDBC
SQLite共有三種JDBC驅動
SQLite Wrapper by Christian
http://www.ch-werner.de/javasqlite/
這個驅動其實是在本地C/C++的SQLite上用JDBC實現進行了包裝。大小100+K。
優點:體積小;速度快
缺點:依賴本地SQLite驅動

SQLite Zentus Driver
http://www.zentus.com/sqlitejdbc/
這個驅動是SQLite數據庫的純Java實現,僅需要這個驅動就可以操作SQLite數據庫文件。大小2.6M。
優點:無其他依賴
缺點:速度稍慢(純Java實現)

SQLite Xerial Driver<更新頻率快>
http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC
這個驅動擴展了Zentus<不再更新>版本,並且在jar中加入了Windows、Linux、Mac OS X三種本地SQLite驅動庫,使四種驅動並存於jar包中。其目的在於在不同的操作系統中自動使用不同的本地驅動(在這三種以外的系統中則使用純Java實現的驅動),既保證無其他依賴,又保證速度最快。但是因爲包含這麼多版本的驅動,所以就比較大,大小有3M。
優點:速度快;無其他依賴
缺點:體積大

經比較,本文選用SQLite Xerial Driver作爲SQLite的數據庫驅動。
SLICK
http://slick.typesafe.com/doc/3.0.0/index.html
SLICK (“Scala Language-Integrated Connection Kit”)是SCALA以函數式操作關係型數據庫的映射類庫,由Typesafe開發。支持關係型數據庫,包括:DB2,Microsoft SQL Server,MySQL,Oracle,SQLite等,並且正在進行對NOSQL數據庫的支持開發。
SLICK現有多個版本,本文使用的版本爲3.1.0,該版本和前幾個版本有很大的不同,以下是注意事項:
SLICK所有操作類型爲Rep[],所有的操作返回類型爲Futrue[],詳細參照:
http://docs.scala-lang.org/zh-cn/overviews/core/futures.html
Futuer是Scala提供的一種併發操作機制,默認實現非阻塞式併發操作,這導致了一個問題,即當主線程調用Slick操作數據庫,而操作結果尚未獲得,主線程已完成,導致SLICK輸出爲空,對於該問題,提出四種解決方法:
1.使用Await.result(db.run(coffees.result), 20 seconds),返回結果,可能拋出異常
2.使用Await.ready(db.run(coffees.result),20 seconds),執行結果,不拋出異常
3.使用Thread.sleep(time),使主線程暫停time(ms),等待Futrue結果
4.使用while(!action.isCompleted){},循環查詢是否已獲取結果,而一種更高效的方式是:while(!action.isCompleted){Thread.sleep(time)},使主線程有時間做別的事情
當要同時等待獲取多個結果時,推薦使用方式四。
在SLICk開發過程中,需要導入多種類包,但有些包不導入並不會導致編譯錯誤,必須手動導入需要的包。
SLICK+SCALA+SQLITE環境搭建
開發工具及版本
Intellij IDEA 15.02
JDK jdk1.8.0_60
SCALA 2.117
SQLITE JDBC 3.7.2
SLICK 3.1.0
項目搭建
使用IDEA創建SCALA SBT工程,以下是SBT配置:
scalaVersion := “2.11.7”
libraryDependencies ++= Seq(
“com.typesafe.slick” %% “slick” % “3.1.0”,
“org.slf4j” % “slf4j-nop” % “1.6.4”
)

libraryDependencies += “com.typesafe.slick” %% “slick-codegen” % “3.1.0”
libraryDependencies += “org.xerial” % “sqlite-jdbc” % “3.7.2”
libraryDependencies += “com.typesafe” % “config” % “1.3.0”
SLICK開發
1、數據庫連接
SLICK提供了多種方式獲取數據庫連接,詳細信息請參考:
http://slick.typesafe.com/doc/3.1.0/database.html
但Typesafe建議使用配置文件,並且專門爲此開發了Config開源項目,該項目通過ConfigFactory.load()自動加載resources資源目錄下的配置文件,本項目將連接數據庫的參數配置在application.conf文件中,Config的詳細使用手冊請參考:
https://github.com/typesafehub/config
本項目數據庫連接類SQLiteHelper.scala,通過SQLiteHelper.getInstance獲得數據庫連接實例。
2、數據庫初始化
本項目提供DBInit類進行數據庫初始化,包括建表,刪表,表的數據初始化。
3、數據庫反向工程
即通過數據庫的表生成對應的SCALA類,往後的數據庫操作都是針對這些類進行的,並且編程人員可以自定義表名、列名和列類型的對應等。
反向工程代碼實現:SQLiteHelper.tbGen,詳細信息請參考:
http://slick.typesafe.com/doc/3.1.0/code-generation.html
4、數據庫操作
本項目實現了CoffeesOp類,封裝了各種對數據庫coffees表操作的方法,主要包括增<批量增>、刪<批量刪>、改<批量改>、查<條件查>等,此類僅作爲一個實例模板,以便後來開發人員能夠參照,迅速開發出自己的操作邏輯。詳細操作介紹請參考:
http://slick.typesafe.com/doc/3.1.0/queries.html

發佈了30 篇原創文章 · 獲贊 44 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章