如何知道ScalaQuery中是否存在数据库表
发布时间:2020-12-12 08:52:45 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试 ScalaQuery,这真的很棒.我可以使用Scala类定义数据库表,并轻松查询. 但是我想知道,在下面的代码中,我如何检查一个表是否存在,所以我不会调用“Table.ddl.create”两次,当我运行这个程序两次得到一个异常? object Users extends Table[(Int,String
我正在尝试
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))”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |