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

Я хочу знать, как я могу выполнять следующие действия в Scala?

  1. Подключение к базе данных postgreSQL.
  2. Пишите SQL-запросы, такие как SELECT, UPDATE и т. Д., Чтобы изменить таблицу в этой базе данных.

Я знаю, что в Python я могу сделать это с помощью PygreSQL, но как это сделать в Scala?

Ответы [ 5 ]

14 голосов
/ 28 июля 2016

Я бы порекомендовал взглянуть на Doobie .

Эта глава в "Книге Дуби" дает хорошее представление о том, как будет выглядеть ваш код, если вы воспользуетесь этой библиотекой.

Сейчас это библиотека выбора для решения этой проблемы, если вы заинтересованы в чистой стороне FP Scala, т.е. scalaz, scalaz-stream (вероятно, fs2 и cats в ближайшее время) и ссылочной прозрачности общий.

Ничего не стоит, что Дуби НЕ ОРМ. По своей сути это просто более качественный высокоуровневый API по сравнению с JDBC.

13 голосов
/ 07 июля 2010

Взгляните на учебник "Использование Scala с JDBC для подключения к MySQL" , замените db url и добавьте нужную библиотеку jdbc. Ссылка была взломана, поэтому вот содержание блога:

Использование Scala с JDBC для подключения к MySQL

Руководство по подключению Scala к базе данных MySQL с использованием JDBC. Существует несколько библиотек баз данных для Scala, но я столкнулся с проблемой, заставив большинство из них работать. Я попытался использовать scala.dbc, scala.dbc2, Scala Query и Querulous, но либо они не поддерживаются, либо имеют очень ограниченный набор функций, либо абстрагируют SQL от странного псевдоязыка.

Play Framework имеет новую библиотеку баз данных под названием ANorm, которая пытается сохранить интерфейс к базовому SQL, но с немного улучшенным интерфейсом scala. Жюри все еще для меня, пока используется только в одном проекте как минимум. Кроме того, я видел, как он работает только в приложении Play, и не похоже, что его можно извлечь слишком легко.

Итак, я остановился на базовом соединении Java JDBC, и это оказалось довольно простым решением.

Вот код для доступа к базе данных с использованием Scala и JDBC. Вам необходимо изменить параметры строки подключения и изменить запрос для вашей базы данных. Этот пример был ориентирован на MySQL, но любой драйвер Java JDBC должен работать так же со Scala.

Основной запрос

import java.sql.{Connection, DriverManager, ResultSet};

// Change to Your Database Config
val conn_str = "jdbc:mysql://localhost:3306/DBNAME?user=DBUSER&password=DBPWD"

// Load the driver
classOf[com.mysql.jdbc.Driver]

// Setup the connection
val conn = DriverManager.getConnection(conn_str)
try {
    // Configure to be Read Only
    val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)

    // Execute Query
    val rs = statement.executeQuery("SELECT quote FROM quotes LIMIT 5")

    // Iterate Over ResultSet
    while (rs.next) {
        println(rs.getString("quote"))
    }
}
finally {
    conn.close
}

Вам нужно будет скачать банку с mysql-соединителем.

Или, если вы используете maven, фрагменты pom для загрузки коннектора mysql, вам нужно проверить, какая последняя версия.

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.12</version>
</dependency>

Чтобы запустить пример, сохраните следующее в файл (query_test.scala) и запустите с помощью следующего, указав путь к классу для jar коннектора:

scala -cp mysql-connector-java-5.1.12.jar:. query_test.scala

Вставить, обновить и удалить

Чтобы выполнить вставку, обновление или удаление, вам нужно создать обновляемый объект оператора. Команда execute немного отличается, и вы, скорее всего, захотите использовать какие-то параметры. Вот пример выполнения вставки с использованием jdbc и scala с параметрами.

// create database connection
val dbc = "jdbc:mysql://localhost:3306/DBNAME?user=DBUSER&password=DBPWD"
classOf[com.mysql.jdbc.Driver]
val conn = DriverManager.getConnection(dbc)
val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE)

// do database insert
try {
  val prep = conn.prepareStatement("INSERT INTO quotes (quote, author) VALUES (?, ?) ")
  prep.setString(1, "Nothing great was ever achieved without enthusiasm.")
  prep.setString(2, "Ralph Waldo Emerson")
  prep.executeUpdate
}
finally {
  conn.close
}
8 голосов
/ 28 апреля 2016

Вам нужно добавить зависимость "org.postgresql" % "postgresql" % "9.3-1102-jdbc41" в build.sbt, и вы можете изменить следующий код для подключения и запроса базы данных. Замените DB_USER вашим пользователем базы данных, а DB_NAME - вашим именем базы данных.

import java.sql.{Connection, DriverManager, ResultSet}

object pgconn extends App {
  println("Postgres connector")

  classOf[org.postgresql.Driver]
  val con_st = "jdbc:postgresql://localhost:5432/DB_NAME?user=DB_USER"
  val conn = DriverManager.getConnection(con_str)
  try {
    val stm = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)

    val rs = stm.executeQuery("SELECT * from Users")

    while(rs.next) {
      println(rs.getString("quote"))
    }
 } finally {
     conn.close()
  }
}
3 голосов
/ 07 июля 2010

Мы используем Squeryl , который до сих пор работал хорошо для нас.В зависимости от ваших потребностей это может помочь.

Вот список поддерживаемых БД и адаптеров

2 голосов
/ 29 апреля 2011

Если вы хотите / должны писать свой собственный SQL, но ненавидите интерфейс JDBC, взгляните на O / R Broker

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