我正在尝试ScalaQuery,这真的很棒.我可以使用Scala类定义数据库表,并轻松查询.
但是我想知道,在下面的代码中,我如何检查一个表是否存在,所以我不会两次调用'Table.ddl.create'并在我运行该程序两次时获得异常?
object Users extends Table[(Int, String, String)]("Users") {
def id = column[Int]("id")
def first = column[String]("first")
def last = column[String]("last")
def * = id ~ first ~ last
}
object Main
{
val database = Database.forURL("jdbc:sqlite:sample.db", driver = "org.sqlite.JDBC")
def main(args: Array[String]) {
database withSession {
// How could I know table Users is alrady in the DB?
if ( ??? ) {
Users.ddl.create
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
ScalaQuery版本0.9.4在org.scalaquery.meta包中包含许多有用的SQL元数据包装类,例如MTable:
http://scalaquery.org/doc/api/scalaquery-0.9.4/#org.scalaquery.meta.MTable
在ScalaQuery的测试代码中,我们可以看到正在使用的这些类的示例.特别是,请参阅org.scalaquery.test.MetaTest.
我写了这个小函数给我一张所有已知表的地图,用表名键控.
import org.scalaquery.meta.{MTable}
def makeTableMap(dbsess: Session) : Map[String, MTable] = {
val tableList = MTable.getTables.list()(dbsess);
val tableMap = tableList.map{t => (t.name.name, t)}.toMap;
tableMap;
}
Run Code Online (Sandbox Code Playgroud)
所以现在,在创建SQL表之前,我可以检查"if(!tableMap.contains(tableName))".
这个帖子有点旧,但也许有人会觉得这很有用.我所有的DAO包括:
def create = db withSession {
if (!MTable.getTables.list.exists(_.name.name == MyTable.tableName))
MyTable.ddl.create
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3556 次 |
| 最近记录: |