Подтвердить что ты не робот

Как подключиться к базе данных postgreSQL в scala?

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

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

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

4b9b3361

Ответ 1

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

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

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

Не стоит ничего, что Doobie не является ORM. По своей сути это просто более удобный API более высокого уровня по сравнению с JDBC.

Ответ 2

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

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

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

В Play Framework есть новая библиотека базы данных, называемая ANorm, которая пытается поддерживать интерфейс для базового SQL, но с небольшим улучшенным интерфейсом Scala. Жюри по-прежнему для меня, только до сих пор используется по одному проекту. Кроме того, Ive видел, что он работает в приложении 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 snippets для загрузки соединителя mysql, вам нужно проверить, что такое последняя версия.

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

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

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
}

Ответ 3

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

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()
  }
}

Ответ 4

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

Вот список поддерживаемого DB и adapters

Ответ 5

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