如何在scala中连接到postgreSQL数据库?

Mah*_*esh 23 postgresql scala

我想知道如何在scala中执行以下操作?

  1. 连接到postgreSQL数据库.
  2. 编写SELECT,UPDATE等SQL查询来修改该数据库中的表.

我知道在python中我可以使用PygreSQL来做但是如何在scala中做这些事情?

jed*_*sah 15

我建议看看Doobie.

"Doobie之书"中的这一章很好地介绍了如果您使用此库,您的代码将会是什么样子.

这是选择的库现在如果你有兴趣在斯卡拉的纯FP方来解决这个问题,即scalaz,scalaz-stream(可能fs2cats即将推出)和一般引用透明.

Doobie不是ORM也没什么.从本质上讲,它只是一个比JDBC更好,更高级的API.


Bor*_*vić 13

看一下教程"使用Scala with JDBC连接到MySQL",替换db url并添加正确的jdbc库.链接破了所以这里是博客的内容:

使用Scala和JDBC连接到MySQL

使用JDBC将Scala连接到MySQL数据库的方法.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
}
Run Code Online (Sandbox Code Playgroud)

您需要下载mysql-connector jar.

或者如果你使用maven,pom片段加载mysql连接器,你需要检查最新版本是什么.

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.12</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

要运行该示例,请将以下内容保存到文件(query_test.scala)并运行,以下指定连接器jar的类路径:

scala -cp mysql-connector-java-5.1.12.jar:. query_test.scala
Run Code Online (Sandbox Code Playgroud)

插入,更新和删除

要执行插入,更新或删除,您需要创建可更新的语句对象.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
}
Run Code Online (Sandbox Code Playgroud)

  • 不是如何连接到postgres sql的问题? (18认同)

小智 9

您需要"org.postgresql" % "postgresql" % "9.3-1102-jdbc41"在build.sbt中添加依赖项,并且可以修改以下代码以连接和查询数据库.将DB_USER替换为db用户和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()
  }
}
Run Code Online (Sandbox Code Playgroud)