我正在开发一个小项目,我想解析一些数据,然后将它放入数据库中。我没有使用Lift,我也找不到标准的方法来做到这一点。
我自己编写查询很好,但我不确定用什么来实际连接到数据库。
答案 0 :(得分:11)
您可以使用JDBC - 让Java与数据库通信的标准方法。您需要适当的MySQL JDBC驱动程序。 Apache DbUtils提供了一些围绕JDBC的实用程序类,并且很有用。
如果你想要一个更高级别的API,它需要一些样板,那么请查看Spring's JDBC integration。
如果你想要一个ORM(对象关系映射),那么Hibernate是一个不错的选择。
我已成功使用Scala中的所有三个。
答案 1 :(得分:5)
我实际上在Scala中编写了一个SQL command shell,它与任何存在JDBC驱动程序的任意数据库进行通信。正如Brian Agnew所说,它完美无缺。此外,还有Querulous,SQueryL和OR/Broker等工具可提供对Scala友好的数据库图层。它们位于JDBC之上,但它们提供了一些额外的语义(在某些情况下通过DSL),以便于您使用。
答案 2 :(得分:5)
当然,您可以使用与JDBC兼容的所有Java版本(Hibernate,Spring等),但为了更好地使用Scala语言,我建议使用Scala特定的框架,它具有更好的DSL。
在https://stackoverflow.com/questions/1362748/looking-for-a-comparison-of-scala-persistence-frameworks
查看有关这些框架的更多信息答案 3 :(得分:3)
尝试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)
}
答案 4 :(得分:2)
为了完整性,还可以查看RichSQL。它的演示代码展示了如何包装JDBC以进行更多类似Scala的操作,但它实际上非常有用。它具有简单和小巧的优点,因此您可以轻松地研究源,看看发生了什么。不要忘记关闭()您的PreparedStatements。
答案 5 :(得分:1)
我刚发现ScalikeJDBC which offers a Scala like API wrapper for JDBC。
(我在研究如何使用ScalaAnorm without Play Framework时找到了ScalikeJDBC。现在看起来我不想在我的项目中使用Anorm。)
这是一个简单的例子,虽然它提供了许多有趣的功能:
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)
}
一些文档链接: