ScalaでOracle11g データベースをJDBCドライバで純粋にアクセスするコードを書いてみます。
javax.servlet.annotation.WebServlet のアノテーションを使います。Tomcat7のServlet Ver3 ですから。
@WebServlet(Array(“/html”)) と書けるところがいい。
package ews.servlet import java.io.IOException import java.util.Date import java.util._ import javax.servlet.ServletException import javax.servlet.annotation.WebServlet import javax.servlet.http.HttpServlet import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse @WebServlet(Array("/html")) class htmlSrv extends HttpServlet { override def doGet(request : HttpServletRequest, response : HttpServletResponse) : Unit = { val out = response.getWriter response.setContentType("text/html; charset=UTF-8"); out.println("<html><body>") out.println("hello scala " + new java.util.Date) val db = new db01 db.run(out) out.println("</body></html>") out.flush out.close } }
OracleJDBCドライバのサンプルコードをScalaで書き換えます。
DriverManager のOracleサーバのIPアドレスは稼働するアドレスを指定します。(以下はサンプルです)
package ews.servlet import java.io.IOException import java.util.Date import java.util._ import seedo.database._ import java.sql._ import oracle.jdbc._ import oracle.jdbc.pool.OracleDataSource import java.io.PrintWriter class db01 { def run(out:PrintWriter) : Unit = { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle11g に接続 val conn = DriverManager.getConnection("jdbc:oracle:thin:@111.111.111.111:1521:orcl11g", "scott", "tiger") // ステートメントを作成 val stmt = conn.createStatement // 問合せの実行 val rset = stmt.executeQuery("select EMPNO, ENAME from EMP order by ENAME") // 問合せ結果の表示 out.println("<table>") while ( rset.next() ) { // 列番号による指定 out.println("<tr><td>"+rset.getInt(1) + "</td><td>" + rset.getString(2)+"</td></tr>") } out.println("</table>") // 結果セットをクローズ rset.close // ステートメントをクローズ stmt.close // 接続をクローズ conn.close } def db : Unit = { // Prompt the user for connect information System.out.println("Please enter information to test connection to the database") var user = "scott" var password = "tiger" var database = "orcl11g" print("Connecting to the database...") println("Connecting...") // Open an OracleDataSource and get a connection val ods = new OracleDataSource ods.setURL("jdbc:oracle:thin:@111.111.111.111:1521:orcl11g"); ods.setUser(user); ods.setPassword(password); val conn = ods.getConnection(); println("connected.") // Create a statement val stmt = conn.createStatement // Do the SQL "Hello World" thing val rset = stmt.executeQuery("select 'Hello World' from dual") while (rset.next()){ println(rset.getString(1)) } // close the result set, the statement and the connection rset.close stmt.close conn.close println("Your JDBC installation is correct."); } }
実際のHEROKUの画面はこんな感じです。
http://radiant-mountain-7703.herokuapp.com/html
ScalaでOKです。
このソースコードでの障害を1つ。
最初は、htmlSrv.scalaファイル1つだったのですが、
import java.sql._
を追加すると、
@WebServlet(Array(“/html”))
のArrayクラスが定義できないとコンパイラからエラー。
これはjava.sql._ライブラリにArrayクラスが独自に定義されていることが原因。
面倒なので、別のクラスにして逃げています。
こんなもんのです。プログラム作るってことは。