データベース(PostgreSQL)との接続
続いて、データベース接続を見てみましょう。Scalaでは、Java用のオープンソース資産を活用できます。今回のPostgreSQL接続においても、JavaのAPI(JDBCドライバ)をそのまま使用します。表4に設定例を掲載します(ここでは、イントラネットワーク経由でIPアドレス192.168.111.111にあるpostgressに接続する例となっていますが、ローカル環境にあるpostgresで試す際には、IPアドレス192.168.111.111 をlocalhostに読み替えてください)。
| PostgreSQLの設定 | |
| バージョン | 8.3.7 |
| インストール先 | 192.168.111.111 |
| 接続先データベース名 | test_db |
| ユーザー名 | test_user |
| パスワード | test_password |
| Java(JRE)のバージョン | |
| バージョン | 1.6.13 |
| JDBCドライバのバージョン | |
| バージョン | JDBC4 PostgreSQL Driver, Version 8.3-604 |
では、実際に接続/切断するプログラムを見てみましょう。
まずは上記「シンプルなScalaプロジェクトの作成」においてMavenで作成したScalaプロジェクトのpom.xmlファイルに、LIST29の内容を追加しましょう。Mavenを使用すると、ライブラリのjarファイルを入手し、コンパイル時にライブラリへのクラスパスを追加する必要がなくなるので便利です。
<dependencies> セクションに以下を追加 <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>8.3-603.jdbc4</version> </dependency>
続いて、¥testApp¥src¥main¥scala¥com¥test_scala_maven¥App.scalaファイルに、LIST30のコードを記述しましょう。
package com.test_scala_maven
object App extends Application {
import java.sql.{DriverManager, Connection}
/**
PostgreSQLに接続する
@retval Connection PostgreSQLへのConnectionオブジェクト
*/
def connectPostgreSQL : Connection = {
println("connectPostgreSQL()")
val connectionString = "jdbc:postgresql://192.168.111.111/test_db?user=test_user&password=test_password"
//PostgreSQL JDBC Driver のロード
Class.forName("org.postgresql.Driver")
//PostgreSQL に接続
DriverManager.getConnection(connectionString)
}
/** PostgreSQLから切断する */
def closePostgreSQL(connection : Connection) = {
println("closePostgreSQL()")
connection.close
}
/** main関数 */
override def main(args:Array[String]) = {
val connection = connectPostgreSQL
closePostgreSQL(connection)
}
}
実行コマンドは次のとおりです。
¥testApp> mvn scala:console -DmainConsole=com.test_scala_maven.App
import文でJDBCドライバクラスの使用をコンパイラに知らせて、connectPostgreSQL関数でJDBCドライバをロードし、接続した戻り値としてConnectionオブジェクトを受け取ります(import文では、「{DriverManager, Connection}」といった形式で中括弧を用いて複数のクラスを一度にインポートしています。その他、Scalaのimport文はJavaのimport文より多様な機能を持っています)。さらにclosePostgreSQL関数にConnectionオブジェクトを渡し、切断しています。Javaの使用経験のある方なら、Javaでの接続方法と同じだということに気付くでしょう。
ScalaからJavaのAPIを呼び出すには、今回と同様にimport文を使用して必要なクラスをインポートし、JavaのAPIリファレンスに書かれているのと同じ方法で、Scalaの文法に従って呼び出します。
