三、介个是数据库接口?
完成了
hello world,我便开始学习android的数据库接口。
这里提一下,受到各种文档和资料关于“Android上四大组件”的说法影响,开始一直觉得content provider对于访问数据库是必须的。后来才发现这个理解是错的,正确的理解是:content provider是用于向外发布数据的,只有需要向外提供数据的时候,应用才提供content provider。我汗。
所以对content provider的探索暂时停止了,学习数据库接口。
据说是提供完全的sqlite支持的,然而发现:功能貌似是有的,接口完全似是而非……
可以传入sql语句、放入参数、运行、遍历结果,啥都能做,问题是以一种奇怪的方式。
如果只是转换编程口音,ok,可以忍。问题在于早已依赖于jdbc之上的种种类库,sql template不能用?orm不能用?手写sql字符串拼接?手写各种get set和各种try finally close?我感到在这样的世界生活是很困难的。
于是我几乎要开始写一个jdbc drvier。
幸好找到了这个——
http://code.google.com/p/sqldroid/。
ps:这里提到了Android中没有暴露内建jdbc driver的原因,有兴趣的同学可以看看。
搞定了基础设施,开始搭建上层建筑。我选择的是scalaQuery(
http://scalaquery.org/),小巧实用,强类型的sql dsl和composable的结果处理方式非常合我的胃口。
写了一小段hello world……好吧,这回是hello database。
不出大家所料:
无法运行。
NullpointException抛出。
很快看出了问题,sqldroid并非是一个完全的实现,只实现了比较常使用的方法。而scalaQuery恰恰使用了不那么常用的方法。——感谢开源世界的一切,问题很容易定位并解决。
一般使用preparedStatment进行select,使用的是executeQuery方法,直接获得返回的resultset。但scalaquery不一样,它的select调用execute方法,再调用getResultset得到resultset。于是,在帮sqldroid实现了getResult方法之后,两者和谐了。
ps:此前还有NosuchMethodException(Exception还是Error?记不清楚了。)抛出,是sqldroid使用了较新android api的缘故,调整了所使用的api版本,于是我的模拟器用上了很欢型的android4。
“hello database”完整代码如下。代码还没有充分体现出scalaQuery的“强类型sql dsl”或者“composable结果处理”,这些后面应该会再做提及。
import org.scalaquery.ql.basic.{ BasicTable => Table }
import org.scalaquery.ql.TypeMapper._
import org.scalaquery.ql._
import android.util.Log
import org.scalaquery.session._
import org.scalaquery.session.Database.threadLocalSession
import org.scalaquery.ql.extended.SQLiteDriver.Implicit._
import android.content.Context
import android.database.sqlite.{ SQLiteDatabase, SQLiteOpenHelper }
class Repository {
val dataPath = "/data/data/net.nielinjie.beautyFans"
val db = Database.forURL("jdbc:sqldroid:" + dataPath + "/main.sqlite", driver = "org.sqldroid.SqldroidDriver")
db.withSession {
try {
SitesDB.Sites.ddl
}
}
object Sites {
def list(): List[String] = {
db.withSession {
(for (s <- Query(SitesDB.Sites)) yield s.name).list
}
}
}
}
object SitesDB {
object Sites extends Table[(Int, String, String, Option[String])]("sites") {
def id = column[Int]("id", O.NotNull)
def name = column[String]("name")
def url = column[String]("url")
def description = column[Option[String]]("description")
def * = id ~ name ~ url ~ description
}
}
分享到:
相关推荐
"Scala实战高清讲解"这本书是学习Scala的宝贵资源,尤其对于那些希望深入理解并提升Scala技能的开发者而言。 1. **Scala基础** - 类与对象:Scala中的所有数据都是对象,类是创建对象的模板。它支持单例对象和伴生...
在Scala中,我们可以定义一个接口,然后提供对应的XML映射文件来描述SQL语句。 - XML映射文件通常包含SQL查询、参数映射和结果集映射,它们定义了MyBatis如何执行查询并将结果转换为Scala对象。 4. **Scala中的SQL...
**IDEA集成Scala编程环境详解** 在现代软件开发中,IntelliJ IDEA作为一款强大的Java集成开发环境(IDE),也提供了对Scala语言的完美支持。本文将详细介绍如何在IntelliJ IDEA中集成Scala开发环境,以便高效地进行...
读书笔记:《Netty实战》源代码——Scala版
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。...Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库
本书向读者介绍如何省时省力地使用...书中囊括250个实用技巧以及700多个代码实例,覆盖了开始学习Scala语言、类库和工具时*常见的问题。本书可作为学习使用JVM语言的理想参考书,同时也适用于有经验的Scala开发者。
这个过程涉及了Java语言替代品——Scala语言在Android开发中的应用。 Scala是一种静态类型的编程语言,它具有函数式编程和面向对象编程的特点,为开发者提供了更高级的抽象和语法糖,使得代码更加简洁和可读。将...
此文档是讲解实战Scala,希望对喜欢大数据的同学有所帮助!!! 学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景...
Scala编程实战(包含源码)完整版Alvin Alexander著.part1.rar
### Scala实战知识点详解 #### Scala简介 Scala是一种融合了面向对象编程与函数式编程特性的高级编程语言。它运行在Java虚拟机(JVM)上,这意味着它可以无缝利用Java丰富的类库资源,同时享受Scala带来的现代编程...
Scala编程实战基础教程是一本专为初学者设计的教程,旨在引领读者逐步掌握Scala这门强大的多范式编程语言。Scala结合了面向对象和函数式编程的特性,使其在处理大数据和分布式计算领域,如Apache Spark,表现出色。...
《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...
4. 配置哨兵服务器:在Scala代码中,需要指定一个由哨兵实例组成的集合,以及主服务器名称、密码(如果有的话)、以及数据库索引。 5. 数据操作:通过实例化后的SentinelMonitoredRedisClient对象,程序可以执行...
### Scala学习之路(一)—— 开发环境搭建与首个程序 #### 一、Scala简介 Scala是一种多范式编程语言,旨在实现可扩展性,并融合了面向对象编程和函数式编程的最佳特性。作为一种与Java非常相似的语言,Scala能够...
**Scala编程实战** Scala是一种多范式编程语言,它结合了面向对象和函数式编程的特点,设计用于在Java虚拟机(JVM)上运行。这本书《Scala编程实战》由O'Reilly Media出版,作者Alvin Alexander是一位知名的软件...
项目概述:邮电学院Scala大数据实时处理——基于Lambda架构的Spark源码实践 本项目为邮电学院假期师资培训的成果,主要采用Scala语言开发,围绕Lambda架构构建了一套实时数据流处理系统。项目包含35个文件,其中...
学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景,提供了大量的Scala实例,同时,也给出底层的原理和相关的...