[英]How can I connect to a postgreSQL database in scala?
我想知道如何在 Scala 中執行以下操作?
我知道在 python 中我可以使用 PygreSQL 來做,但是如何在 Scala 中做這些事情?
需要在 build.sbt 中添加依賴"org.postgresql" % "postgresql" % "9.3-1102-jdbc41"
,你可以修改以下代碼來連接和查詢數據庫。 將 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()
}
}
看教程“Using Scala with JDBC to connect to MySQL” ,替換db url並添加正確的jdbc庫。 鏈接已損壞,因此這是博客的內容:
使用 Scala 和 JDBC 連接到 MySQL
使用 JDBC 將 Scala 連接到 MySQL 數據庫的方法。 Scala 有許多數據庫庫,但我遇到了一個問題,讓它們中的大部分工作。 我嘗試使用 scala.dbc、scala.dbc2、Scala Query 和 Querulous,但它們要么不受支持,要么功能非常有限,要么將 SQL 抽象為一種奇怪的偽語言。
Play 框架有一個名為 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-connector jar。
或者,如果您使用 maven,即加載 mysql 連接器的 pom 片段,您需要檢查最新版本是什么。
<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
}
如果您想/需要編寫自己的 SQL,但討厭 JDBC 接口,請查看O/R Broker
我會推薦Quill 查詢庫。 這里是李昊毅的介紹帖,開始吧。
{
import io.getquill._
import com.zaxxer.hikari.{HikariConfig, HikariDataSource}
val pgDataSource = new org.postgresql.ds.PGSimpleDataSource()
pgDataSource.setUser("postgres")
pgDataSource.setPassword("example")
val config = new HikariConfig()
config.setDataSource(pgDataSource)
val ctx = new PostgresJdbcContext(LowerCase, new HikariDataSource(config))
import ctx._
}
定義一個類 ORM:
// mapping `city` table
case class City(
id: Int,
name: String,
countryCode: String,
district: String,
population: Int
)
並查詢所有項目:
@ ctx.run(query[City])
cmd11.sc:1: SELECT x.id, x.name, x.countrycode, x.district, x.population FROM city x
val res11 = ctx.run(query[City])
^
res11: List[City] = List(
City(1, "Kabul", "AFG", "Kabol", 1780000),
City(2, "Qandahar", "AFG", "Qandahar", 237500),
City(3, "Herat", "AFG", "Herat", 186800),
...
ScalikeJDBC 非常易於使用。 它允許您使用內插字符串編寫原始 SQL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.