TOMCAT JSPからScalaクラスを使う その2

Posted 2010年11月18日 by

TOMCATの JSP から Scala をどう使ってみるのがいいのかをさらに探ります。

1レコードの格納方式をタプルから List に変えてみます。

変更点は while ループのなかで宣言したone が List が追加されたことだけです。

実行結果はこれだけの違いなのですが大違い。

package SeeDo
import java.sql.{DriverManager, Connection, Statement, ResultSet,SQLException}
import java.util.Date
import java.util.ArrayList

class OracleSelect2 {
  var jdbcURL = "jdbc:oracle:thin:@192.168.0.105:1521:ORCL"
  def oracle : ArrayList[Any] = {
	var list = new ArrayList[Any]
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()
        var con = DriverManager.getConnection(jdbcURL,"scott","tiger")
	    try {
		    var stmt = con.createStatement()
		    var rs = stmt.executeQuery("SELECT * FROM EMP")
		    while (rs.next()){
		    	val one = List(rs.getInt("empno")
			        , rs.getString("ename")
			        , rs.getString("job")
			        , rs.getInt("mgr")
			        , rs.getDate("hiredate")
			        , rs.getInt("deptno")
			        , rs.getInt("sal")
		    		)
		    	list.add(one)
		    }
            stmt.close();
		} catch {
		  case e:SQLException => println("Database error "+e)
		  case e => {
		    println("Some other exception type:")
		    e.printStackTrace()
		  }
		} finally {
		  con.close()
		}
    } catch {
	  case e:SQLException => println("Database error "+e)
	  case e => {
	    println("Some other exception type:")
	    e.printStackTrace()
	  }
    }
    list
  }
}




JSP 側もこれに合わせて変更します。

<%@ page contentType="text/html;charset=MS932" %>
<%@ page import = "java.util.*" %>
<%@ page import = "scala.*" %>
<%@ page import = "scala.collection.immutable.*" %>
<%@ page import = "SeeDo.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Scala test</title></head>
<BODY><TABLE border='2'>
<%	OracleSelect2 o = new OracleSelect2();
	ArrayList list = o.oracle();
	for(int i = 0; i < list.size();i++){
%>
<TR><TH><%=i%></TH><TD><%=list.get(i).getClass()%></TD><TD><%=list.get(i)%></TD></TR>
<%	}
%>
</TABLE>
</BODY></html>




Scala の List クラスを JSP(Java)から使おうとするのですが、うまくいきません。

やはり、JSP から使うのであれば、Scala 側からは Java クラスで返すのがよさそうです。

実行結果は以下のとおりです。

クラス名が scala.collection.immutable.$colon$colon となっています。

0 class scala.collection.immutable.$colon$colon List(7369, SMITH, CLERK, 7902, 1980-12-17, 20, 800)
1 class scala.collection.immutable.$colon$colon List(7499, ALLEN, SALESMAN, 7698, 1981-02-20, 30, 1600)
2 class scala.collection.immutable.$colon$colon List(7521, WARD, SALESMAN, 7698, 1981-02-22, 30, 1250)
3 class scala.collection.immutable.$colon$colon List(7566, JONES, MANAGER, 7839, 1981-04-02, 20, 2975)
4 class scala.collection.immutable.$colon$colon List(7654, MARTIN, SALESMAN, 7698, 1981-09-28, 30, 1250)
5 class scala.collection.immutable.$colon$colon List(7698, BLAKE, MANAGER, 7839, 1981-05-01, 30, 2850)
6 class scala.collection.immutable.$colon$colon List(7782, CLARK, MANAGER, 7839, 1981-06-09, 10, 2450)
7 class scala.collection.immutable.$colon$colon List(7788, SCOTT, ANALYST, 7566, 1987-04-19, 20, 3000)
8 class scala.collection.immutable.$colon$colon List(7839, KING, PRESIDENT, 0, 1981-11-17, 10, 5000)
9 class scala.collection.immutable.$colon$colon List(7844, TURNER, SALESMAN, 7698, 1981-09-08, 30, 1500)
10 class scala.collection.immutable.$colon$colon List(7876, ADAMS, CLERK, 7788, 1987-05-23, 20, 1100)
11 class scala.collection.immutable.$colon$colon List(7900, JAMES, CLERK, 7698, 1981-12-03, 30, 950)
12 class scala.collection.immutable.$colon$colon List(7902, FORD, ANALYST, 7566, 1981-12-03, 20, 3000)
13 class scala.collection.immutable.$colon$colon List(7934, MILLER, CLERK, 7782, 1982-01-23, 10, 1300)

Post Details

  • Post Title: TOMCAT JSPからScalaクラスを使う その2
  • Author: admin
  • Filed As: Scala
  • Tags:
  • You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

コメントを残す