代码之家  ›  专栏  ›  技术社区  ›  Dan G

如何使用Scala连接到MySQL数据库?

  •  8
  • Dan G  · 技术社区  · 16 年前

    我正在做一个小项目,我想解析一些数据,然后把它放到数据库中。我不是在用电梯工作,我还没找到一个标准的方法来做这件事。

    我可以自己编写查询,但是我不确定使用什么连接到数据库。

    6 回复  |  直到 16 年前
        1
  •  11
  •   frostmatthew    12 年前

    你可以用 JDBC -让Java与数据库对话的标准方法。你需要合适的 MySQL JDBC Apache DbUtils 提供了一些围绕JDBC的实用程序类,这将非常有用。

    Spring's JDBC integration .

    如果您想要一个ORM(对象关系映射),那么 Hibernate 是个不错的选择。

    我在Scala中成功地使用了这三种方法。

        2
  •  6
  •   Community Mohan Dere    9 年前

    当然,您可以使用与JDBC兼容的所有Java版本(Hibernate、Spring等),但是为了更好地使用Scala语言,我建议使用Scala特定的框架,它有更好的DSL。

    • ScalaQuery 是一种API/DSL(领域特定语言),构建在JDBC之上,用于访问Scala中的关系数据库。设计时考虑到以下目标:
    • Squeryl
    • SORM 是一个Scala-ORM框架,旨在通过高级抽象和函数式编程风格消除样板代码并解决可伸缩性问题
    • Slick

    有关这些框架的更多信息,请访问 https://stackoverflow.com/questions/1362748/looking-for-a-comparison-of-scala-persistence-frameworks

        3
  •  5
  •   Brian Clapper    16 年前

    实际上我写了一本 SQL command shell Querulous , SQueryL OR/Broker 提供了Scala友好的数据库层。它们位于JDBC之上,但是它们提供了一些额外的语义(在某些情况下,通过dsl)来让事情变得更简单。

        4
  •  3
  •   nilskp    14 年前

    尝试 O/R Broker :

    case class MyObj(name: String, year: Int)
    
    val ds = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    // set properties on ds
    
    import org.orbroker._
    val builder = new BrokerBuilder(ds)
    val broker = builder.build
    
    val myObj: MyObj = // Parse stuff to create MyObj instance
    broker.transaction() { session =>
      session.execute("INSERT INTO MYTABLE VALUES(:obj.name, :obj.year)", "obj"->myObj)s
    }
    
    val myObjs: Seq[MyObj] = // Parse stuff to create sequence of MyObj instances
    broker.transaction() { session =>
      session.executeBatch("INSERT INTO MYTABLE VALUES(:obj.name, :obj.year)", "obj"->myObjs)
    }
    
        5
  •  2
  •   yamilmedina    11 年前

    完整性,也请检查 RichSQL . 这是演示代码,展示了如何包装JDBC以实现更像Scala的操作,但它实际上非常有用。它的优点是简单和小,所以你可以很容易地研究源代码,看看发生了什么。别忘了关闭()你准备好的语句。

        6
  •  1
  •   Peter Lamberg qed    10 年前

    我刚发现 ScalikeJDBC which offers a Scala like API wrapper for JDBC .

    (我在研究如何使用ScalikeJDBC时发现了它 ScalaAnorm without Play Framework

    这是一个简单的例子,但它提供了许多有趣的功能,这里没有显示:

    import scalikejdbc._
    
    Class.forName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource")
    
    ConnectionPool.singleton("jdbc:mysql://localhost:3306/myschema", "user", "password")
    
    DB.localTx { implicit conn =>
    
      val data = sql"select mystringcol, myintcolumn from mytable".map {
        rs => (rs.string("mystringcol"), rs.int("myintcolumn"))
      }.list().apply()
    
      println(data)
    
    }
    

    一些文档链接: