scalaでOracle接続を試す



仕事で利用しているOracleScalaから接続してみた。ソースコードは、「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が利用できるようになりたいです。