Как я могу подключиться к базе данных MySQL, используя Scala? - PullRequest
8 голосов
/ 20 июня 2010

Я работаю над небольшим проектом, в котором я хотел бы проанализировать некоторые данные и затем поместить их в базу данных. Я не работаю с Lift, и я не смог найти стандартный способ сделать это.

Я хорошо пишу запросы самостоятельно, но я не уверен, что использовать для фактического подключения к БД.

Ответы [ 6 ]

11 голосов
/ 20 июня 2010

Вы можете использовать JDBC - стандартный способ заставить Java общаться с базами данных. Вам потребуется соответствующий драйвер MySQL JDBC . Apache DbUtils предоставляет некоторые служебные классы, окружающие JDBC, и будет полезен.

Если вам нужен API более высокого уровня, который удаляет часть шаблона, проверьте Интеграция Spring JDBC .

Если вы хотите ORM (объектно-реляционное отображение), тогда Hibernate - хороший выбор.

Я успешно использовал все три в Scala.

5 голосов
/ 13 января 2014

Конечно, вы можете использовать все версии Java, совместимые с JDBC (Hibernate, Spring и т. Д.), Но для лучшего использования языка Scala я рекомендую использовать специальную среду Scala, которая имеет лучший DSL.

  • ScalaQuery - это API / DSL (предметно-ориентированный язык), созданный поверх JDBC для доступа к реляционным базам данных в Scala. Он был разработан с учетом следующих целей:
  • Squeryl - это Scala ORM и DSL для общения с базами данных с минимальной детализацией и максимальной безопасностью типов
  • SORM - это ORM-среда Scala, предназначенная для устранения стандартного кода и решения проблем масштабируемости с помощью высокоуровневой абстракции и функционального стиля программирования
  • Slick - Typesafe поддерживаемый проект с функциональным реляционным отображением

Узнайте больше об этих платформах на https://stackoverflow.com/questions/1362748/looking-for-a-comparison-of-scala-persistence-frameworks

5 голосов
/ 20 июня 2010

Я на самом деле написал командную оболочку SQL в Scala, которая обращается к любой произвольной базе данных, для которой существует драйвер JDBC. Как отмечает Брайан Агнью, все работает отлично. Кроме того, существуют такие инструменты, как Querulous , SQueryL и OR / Broker , которые предоставляют Scala-дружественные слои базы данных. Они расположены поверх JDBC, но предоставляют некоторую дополнительную семантику (в некоторых случаях через DSL), чтобы упростить вам задачу.

3 голосов
/ 29 июня 2010

Попробуйте O / R Брокер :

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)
}
2 голосов
/ 21 июня 2010

Для полноты также проверьте RichSQL .Это демонстрационный код, показывающий, как обернуть JDBC для выполнения большего количества операций, подобных Scala, но на самом деле он вполне применимПреимущество в том, что он простой и маленький, поэтому вы можете легко изучить источник, чтобы увидеть, что происходит.Не забудьте закрыть () ваши PreparedStatements.

1 голос
/ 02 января 2016

Я только что обнаружил ScalikeJDBC, который предлагает Scala-подобную оболочку API для JDBC .

(я обнаружил ScalikeJDBC, когда исследовал, как использовать ScalaAnorm без Play Framework . Теперь похоже, что 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)

}

Некоторые ссылки на документацию:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...