标签: scalaquery

我怎么知道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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

scala scalaquery

9
推荐指数
2
解决办法
3556
查看次数

如何在ScalaQuery中回滚会话?

对于我的单元测试,我想设置一个数据库,用基本信息填充它,并在会话中运行每个测试,以回滚对数据库所做的所有更改,以便始终为每个测试提供一个原始副本.

我正在寻找类似的东西

db withSession {
   <create my objects under test>
   <run operations>
   <run asserts>

   this.rollback()
}
Run Code Online (Sandbox Code Playgroud)

回滚功能是在Scala Query的早期版本中,但它现在似乎缺失了.我该如何实现此功能?

最好的祝福

sql scala scalaquery

9
推荐指数
1
解决办法
813
查看次数

光滑,如何将查询映射到继承表模型?

光滑,如何将查询映射到继承表模型?即

我有表A,B,CA是"父"表,B&C是"子"表我想知道的是我应该如何使用光滑模型这样A将是抽象和B&C具体类型,以及查询A中的行将导致B或C对象

像JPA那样的东西InheritanceType.TABLE_PER_CLASS.

scala scalaquery slick

9
推荐指数
1
解决办法
2157
查看次数

ScalaQuery多个主键和外键

我们如何在ScalaQuery中定义多主键和外键?

object myTable1 extends Table([Int])("myTable1") {
  def id = column[Int]("id", O PrimaryKey)
  def * = id
}    

object myTable2 extends Table([Int, Int, Int])("myTable2") {
  def pk1 = column[Int]("id1")
  def pk2 = column[Int]("id2")
  def fk1 = column[Int]("fk1")
  def * = pk1 ~ pk2 ~ fk1
}
Run Code Online (Sandbox Code Playgroud)

那么如果我想让myTable2中的pk1和pk2成为主键,myTable2中的fk1引用myTable1中的id,那么使用的代码是什么?

sql scala scala-2.8 scalaquery

8
推荐指数
1
解决办法
1860
查看次数

scalaquery问题没有隐式会话

这是我要执行的scalaquery查询,

...
def generateFares(scheduleId:NamedColumn[Int], toCityId:NamedColumn[Int], fromCityId:NamedColumn[Int]):List[(String,Int,String)] = {
      var list:List[(String,Int,String)] = Nil;
      val q = for {
        tf <- ticketingDB.ticketFares if (( tf.scheduleId is scheduleId ) && ( tf.fromCityId is fromCityId ) && ( tf.toCityId is toCityId ))
        tft <- ticketingDB.ticketFareType if tft.id is tf._7
      }{
        list = (tft._2, tf._5, tf._6)::list
      }
      list
    }
...
Run Code Online (Sandbox Code Playgroud)

在这个连接中,我收到一个编译错误:

 could not find implicit value for parameter session: org.scalaquery.session.Session
Run Code Online (Sandbox Code Playgroud)

在第二个电话中.(tft < - ticketingDB)

我无法理解scalaquery的这种行为.

ps:我可以保证在withSession块中调用该方法.

请帮我调试并创建无错连接.

scala scalaquery

7
推荐指数
1
解决办法
1834
查看次数

新的Scala项目的NoSQL(例如MongoDB)或RDMS(例如PostgreSQL)?

我正在Scala开发一个全新的项目.它只是一堆CRUD操作的应用程序,但是,由于一些古怪的要求,Play2或Lift不符合要求,所以我将从头开始开发应用程序.这意味着Anorm或ScalaQuery成为数据库集成的不太明显的选择,让我有一个问题:是时候尝试新的东西了吗?

我过去的技术堆栈主要包括Java和PostgreSQL,我有ORM和纯SQL的经验.像MongoDB这样的NoSQL数据库管理系统是典型RDBMS的良好替代品,还是特殊情况的应用程序数据存储?此外,数据库的选择如何影响更大的Scala系统设计(如果有的话)?例如,您使用类似JSON的接口与数据库进行通信,以及Web和REST服务之间的JSON这一事实并不意味着如果中间的所有内容都成为Scala对象,或者它是什么?

我基本上要求有人从关系数据库转移到对象/文档类型数据库,特别是使用Scala.我知道即将发布的SLICK承诺提供良好的RDBMS集成.那么,如果像TypeSafe这样的公司决定在TypeSafe堆栈中建立RDBMS集成部分,那么我将使用Casbah集成到MongoDB上游吗?

如果这个问题看起来有点含糊,请道歉.我希望有正确见解或经验的人能够提供帮助.

更新:

不向SLICK添加链接的道歉(这是相当新的).开始:

更新2:

对于技术我个人的第一场胜利通常为开发人员的生产力 -这相当于轻巧简单:快速学习,容易维护,没有魔法

architecture scala mongodb scalaquery casbah

7
推荐指数
1
解决办法
2883
查看次数

如何使用ScalaQuery插入BLOB字段?

我使用了ScalaQuery和Scala.

如果我有一个Array [Byte]对象,我该如何将它插入表中?

object TestTable extends BasicTable[Test]("test") {
  def id = column[Long]("mid", O.NotNull)
  def extInfo = column[Blob]("mbody", O.Nullable)

  def * = id ~ extInfo <> (Test, Test.unapply _)
}

case class Test(id: Long, extInfo: Blob)
Run Code Online (Sandbox Code Playgroud)

我可以使用def extInfo = column[Array[Byte]]("mbody", O.Nullable)BLOB类型字段定义使用的方法,如何操作(UPDATE,INSERT,SELECT)?

BTW:没有ScalaQuery标签

sql scala scalaquery

6
推荐指数
1
解决办法
3791
查看次数

为什么这个ScalaQuery语句只删除奇数行?

尝试删除一批记录时,只删除奇数行!

val byUser = Orders.createFinderBy(_.userID)
byUser(id).mutate(_.delete)
Run Code Online (Sandbox Code Playgroud)

如果我改为打印记录,我会得到正确的行数.

byUser(id).mutate{x => x.echo}
Run Code Online (Sandbox Code Playgroud)

我解决了这个问题,它生成了所需的SQL.

(for{o <- Orders if o.userID is id.bind } yield o).delete
Run Code Online (Sandbox Code Playgroud)

但是,mutate版本为何或如何仅影响奇数行?

scala scalaquery

6
推荐指数
1
解决办法
376
查看次数

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

在ScalaQuery中,我可以使用"原始"结果行:

for (
  x <- queryNA[(String,Int)]("select * from foo")(
    GetResult(r => (r.<<[String], r.<<[Int]))
  )
) {
  println(x)
}
Run Code Online (Sandbox Code Playgroud)

但这完全是位置的(r是a PositionedResult).有没有办法使用列名来处理结果?(例如,row.getString("foo").)

我可以使用另一个支持它的数据库API,比如Querulous,但我已经在我的代码中使用ScalaQuery进行类型安全查询,并且如果可能的话,我想坚持使用一个库.

scala scalaquery

5
推荐指数
1
解决办法
300
查看次数

在for表达式中对Slick查询结果进行排序

以下函数工作正常,但我希望它首先按parent_id排序结果,然后按顺序排序.

def getTree = for {
  (a, c) <- Activities leftJoin Clients on (_.id === _.id_a)
} yield (a.id, a.label, a.parent_id, a.order, c.id.?, a=c.name)
Run Code Online (Sandbox Code Playgroud)

我如何使用Slick做到这一点?

scala scalaquery slick

5
推荐指数
1
解决办法
3302
查看次数

标签 统计

scala ×10

scalaquery ×10

sql ×3

slick ×2

architecture ×1

casbah ×1

mongodb ×1

scala-2.8 ×1