tutorial - ¿Cómo puedo conectarme a una base de datos postgreSQL en scala?
crear base de datos en postgresql por consola (5)
Estamos usando Squeryl , que hasta ahora está funcionando bien para nosotros. Dependiendo de sus necesidades puede hacer el truco.
Aquí hay una list de las bases de datos compatibles y los adapters
Quiero saber cómo puedo hacer lo siguiente en Scala.
- Conectarse a una base de datos postgreSQL.
- Escriba consultas SQL como SELECT, ACTUALIZAR, etc. para modificar una tabla en esa base de datos.
Sé que en Python puedo hacerlo usando PygreSQL pero, ¿cómo hacer estas cosas en Scala?
Mire el tutorial "Uso de Scala con JDBC para conectarse a MySQL" , reemplace el db url y agregue la biblioteca jdbc correcta. El enlace se rompió, así que aquí está el contenido del blog:
Usando Scala con JDBC para conectarse a MySQL
Una guía sobre cómo conectar Scala a una base de datos MySQL usando JDBC. Hay una serie de bibliotecas de bases de datos para Scala, pero me encontré con un problema para que la mayoría de ellas funcionaran. Intenté usar scala.dbc, scala.dbc2, Scala Query y Querulous, pero tampoco son compatibles, tienen un conjunto destacado muy limitado o resumen de SQL a un pseudo lenguaje extraño.
Play Framework tiene una nueva biblioteca de base de datos llamada ANorm, que intenta mantener la interfaz a SQL básico pero con una interfaz scala ligeramente mejorada. El jurado aún está deliberando para mí, solo lo he usado en un proyecto de forma mínima hasta ahora. Además, solo lo he visto funcionar dentro de una aplicación Play, no parece que se pueda extraer con demasiada facilidad.
Así que terminé con una conexión Java JDBC básica y resultó ser una solución bastante fácil.
Aquí está el código para acceder a una base de datos utilizando Scala y JDBC. Debe cambiar los parámetros de la cadena de conexión y modificar la consulta para su base de datos. Este ejemplo estaba orientado hacia MySQL, pero cualquier controlador Java JDBC debería funcionar igual con Scala.
Consulta básica
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
}
Necesitará descargar el tarro de mysql connector.
O si está utilizando maven, los fragmentos de pom para cargar el conector mysql, deberá verificar cuál es la versión más reciente.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.12</version>
</dependency>
Para ejecutar el ejemplo, guarde lo siguiente en un archivo (query_test.scala) y ejecute usando lo siguiente, especificando la ruta de clase al jar del conector:
scala -cp mysql-connector-java-5.1.12.jar:. query_test.scala
Insertar, actualizar y eliminar
Para realizar una inserción, actualización o eliminación, debe crear un objeto de declaración actualizable. El comando de ejecución es ligeramente diferente y lo más probable es que desee utilizar algún tipo de parámetros. Aquí hay un ejemplo haciendo una inserción usando jdbc y scala con parámetros.
// 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
}
Recomendaría echar un vistazo a Doobie .
This capítulo del "Libro de Doobie" le da una idea de cómo se verá su código si utiliza esta biblioteca.
Esta es la biblioteca de elección en este momento para resolver este problema si está interesado en el lado PF puro de Scala, es decir, scalaz-stream
, scalaz-stream
(probablemente fs2
y cats
pronto) y la transparencia referencial en general.
No vale nada que Doobie NO sea un ORM. En su núcleo, es simplemente una API más agradable y de mayor nivel sobre JDBC.
Si desea / necesita escribir su propio SQL, pero odia la interfaz JDBC, eche un vistazo a O / R Broker
"org.postgresql" % "postgresql" % "9.3-1102-jdbc41"
agregar la dependencia "org.postgresql" % "postgresql" % "9.3-1102-jdbc41"
en build.sbt y puede modificar el siguiente código para conectarse y consultar la base de datos. Reemplace DB_USER con su usuario db y DB_NAME como su nombre de 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()
}
}