A howto on connecting Scala to a MySQL database using JDBC. There are a
number of database libraries for Scala, but I ran into a problem getting
most of them to work. I attempted to use scala.dbc, scala.dbc2, Scala
Query and Querulous but either they aren't supported, have a very
limited featured set or abstracts SQL to a weird pseudo language.
The Play Framework has a new database library called
ANorm
which tries to keep the interface to basic SQL but with a slight
improved scala interface. The jury is still out for me, only used on one
project minimally so far. Also, I've only seen it work within a Play
app, does not look like it can be extracted out too easily.
So I ended up going with basic Java JDBC connection and it turns out to
be a fairly easy solution.
Here is the code for accessing a database using Scala and JDBC. You need
to change the connection string parameters and modify the query for
your database. This example was geared towards MySQL, but any Java JDBC
driver should work the same with Scala.
Basic Query
- 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
- }
You will need to download the
Or if you are using maven, the pom snippets to load the mysql connector, you'll need to check what the latest version is.
- mysql
- mysql-connector-java
- 5.1.12
To run the example, save the following to a file (query_test.scala) and
run using, the following specifying the classpath to the connector jar:
- scala -cp mysql-connector-java-5.1.12.jar:. query_test.scala
Insert, Update and Delete
To perform an insert, update or delete you need to create an updatable
statement object. The execute command is slightly different and you will
most likely want to use some sort of parameters. Here's an example
doing an insert using jdbc and scala with parameters.
- // 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
- }
摘自
阅读(2709) | 评论(1) | 转发(0) |