2010-07-07 52 views

Respuesta

11

Observe el tutorial "Using Scala with JDBC to connect to MySQL", reemplace la URL de db y agregue la biblioteca jdbc correcta. El vínculo se rompió así que aquí está el contenido del blog:

Usando Scala con JDBC para conectarse a MySQL

un COMO sobre la conexión de 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 al lograr que la mayoría de ellas funcionaran. Intenté usar scala.dbc, scala.dbc2, Scala Query y Querulous, pero o bien no son compatibles, tienen un conjunto destacado muy limitado o abstraen SQL a un pseudo idioma extraño.

Play Framework tiene una nueva biblioteca de base de datos denominada ANorm que intenta mantener la interfaz con SQL básico pero con una interfaz scala levemente mejorada. El jurado todavía está por salir, solo se ha usado en un proyecto mínimamente hasta ahora. Además, solo lo he visto funcionar dentro de una aplicación Play, no parece que pueda extraerse demasiado fácilmente.

Así que terminé yendo con la 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 usando Scala y JDBC. Necesita cambiar los parámetros de la cadena de conexión y modificar la consulta para su base de datos. Este ejemplo se orientó hacia MySQL, pero cualquier controlador JDBC de Java debería funcionar igual con Scala.

básico de consulta

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 
} 

Usted tendrá que descargar el frasco-conector de MySQL.

O si está usando maven, los fragmentos de pom para cargar el conector mysql, necesitará verificar cuál es la última versión.

<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 utilizando la siguiente especificando la ruta de clase a la jarra de 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 
} 
+1

fyi, el enlace está roto –

+0

gracias, lo he solucionado –

+6

¿No era la pregunta cómo conectarse a postgres sql? –

3

Estamos utilizando Squeryl, que está funcionando bien hasta el momento para nosotros. Dependiendo de tus necesidades, puede hacer el truco.

Aquí es una list del apoyada DB y el adapters

1

Si quieres/necesidad de escribir su propio SQL, pero odio la interfaz JDBC, echar un vistazo a O/R Broker

+1

Ese enlace está actualmente roto. – jedesah

+1

@jedesah Reparado. – nilskp

+0

Me pregunto si SO ofrece una insignia para "Enlace roto corregido después de cinco o más años". Supongo que la insignia de "Mantenimiento a largo plazo". Mas uno. Lo hubiera llamado el "Ir por intermediario". –

6

Es necesario añadir 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 de base de datos y DB_NAME como su nombre de base de datos.

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

Recomendaría echar un vistazo a Doobie.

This capítulo en el "Libro de Doobie" le da una buena idea de cómo se verá su código si hace uso de esta biblioteca.

Esta es la biblioteca de elección en este momento para resolver este problema si está interesado en el lado FP pura de Scala, es decir scalaz, scalaz-stream (probablemente fs2 y cats pronto) y la transparencia referencial en general.

No vale la pena que Doobie NO sea un ORM. En esencia, es simplemente una API más agradable y de más alto nivel que JDBC.

Cuestiones relacionadas