Как подключиться к базе данных postgreSQL в scala?
Я хочу знать, как я могу выполнить следующие действия в scala?
- Подключиться к базе данных postgreSQL.
- Записывайте SQL-запросы, такие как SELECT, UPDATE и т.д., чтобы изменить таблицу в этой базе данных.
Я знаю, что в python я могу это сделать с помощью PygreSQL, но как это сделать в scala?
Ответы
Ответ 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