scala - 我怎么知道Scala查询中是否存在数据库表

标签 scala scalaquery

我正在尝试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
            }
        }
    }
}

最佳答案

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;
}

因此,现在,在创建SQL表之前,我可以检查“if(!tableMap.contains(tableName))”。

关于scala - 我怎么知道Scala查询中是否存在数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5442034/

相关文章:

java - 如何创建新文件夹?

java - 如何使用 target/...jar 执行 scala 对象?

scala - ScalaQuery 中带有命名字段的原始结果行?

scala - 在 ScalaQuery 中重用 session ?

sql-server - 在 Lift 上下文中使用 ScalaQuery 的好例子?

java - 使用 java 方法作为 scala 函数

scala - Spark /SQL :spark can't resolve symbol toDF

scala spray.io 测试框架

scala - ScalaQuery中for comprehension的元素类型

scalaquery 问题没有隐式 session