scalaでOracle接続を試す
仕事で利用しているOracleにScalaから接続してみた。ソースコードは、「Oracle11gをJDBCドライバを使ってScalaから操作」を参考にしております。
Oracleの10gに接続しております。(sshでポートフォワードしている為、127.0.0.1で接続しています。)
変更している点
- package宣言を加えています
- USER_OBJECTSをOBJECT_TYPEでカウントされるSQLに変えています。
Windowsでコンパイルさせて、Windowsで動作させてみました。
scalac -cp build/classes -d build/classes/ src/sample/SqlSelect.scala scala -cp build/classes;lib/classes12.zip sample.SqlSelect
scalacでコンパイルする際に、「-cp build/classes」は、特にいらないのですが付けてます。
Linux環境では、「-cp build/classes/」と最終文字に/を加えて上げないとエラーがでました。
Linux環境などで文字コードがEUCだったりすると、「-encoding euc-jp」とつけてあげる必要があったりします。
package sample import java.io.PrintWriter import java.sql.{DriverManager, Connection, Statement, ResultSet,SQLException} object SqlSelect { var jdbcURL = "jdbc:oracle:thin:@127.0.0.1:1521:schema" var user ="user" var passwd ="password" def main(args : Array[String]) : Unit = { val SQL_USER_OBJECT:String = "SELECT OBJECT_TYPE, COUNT(OBJECT_TYPE) FROM USER_OBJECTS GROUP BY OBJECT_TYPE ORDER BY COUNT(OBJECT_TYPE)"; val out = new PrintWriter("execute.log") try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance() var con = DriverManager.getConnection(jdbcURL,user,passwd) try { var stmt = con.createStatement() var rs = stmt.executeQuery(SQL_USER_OBJECT) while (rs.next()){ print(rs.getString(1) + " ") println(rs.getString(2)) } stmt.close() } catch { case e:SQLException => { println("Database error1 "+e) out.println("Database error1 "+e) out.close } case e => { println("Some other exception type:") e.printStackTrace() } } finally { con.close() } } catch { case e:SQLException => { println("Database error2 "+e) out.println("Database error2 "+e) out.close } case e => { println("Some other exception type:") e.printStackTrace() } } } }
日常で普通にScalaが利用できるようになりたいです。