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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值