ScalaでDBフレームワークによるDB操作ができた

Posted 2010年11月19日 by

Javaで自作したデータベース・フレームワークでDB操作することができた。

OracleにあやかってSqlPlusクラス。

SELECT文は、val results1 = db.select(“*”).from(“EMP”).executeQuery

executeQueryメソッドを呼ぶと、関数の返り値がArrayListで複数レコードを返します。

import scala.collection.JavaConversions._ によって Java のコレクションクラスをScalaのfor構文で使えるようになります。

1レコード分は、Array[Object] なので asInstanceOf でキャストします。カラムもfor構文で出力。

このフレームワークの特徴はBeanクラスが使えること。

Scalaで定義したSeeDo.Employeeクラスを引数に渡したところ、Java用に作ったのでScalaのStringクラスなど引数を取るsetterがないと言われてしまいます。

package SeeDo
import seedo.database._
import scala.collection.JavaConversions._

object sqlplus {
  def main(args : Array[String]) : Unit = {
	  val db = new SqlPlus
	  // Array
	  val results1 = db.select("*").from("EMP").executeQuery
	  for(i <- results1){
	 	  var record = i.asInstanceOf[Array[Object]]
	 	  for(j <- record){
	 		  print(j+" ")
	 	  }
	 	  println
	  }
	  // Bean class
	  val results = db.select("*").from("EMP").executeQuery(Class.forName("SeeDo.Employee"))
	  for(i <- results){
	 	  println(i)
	  }
	  db.close
  }
}




このフレームワークにデータベースの接続用の記述がないのはプロパティファイルから定義を読み込むことができるため。

TOMCAT環境下で実行するなら、ContextからDataSourceをLookupしてコネクションプールから接続します。

以下のようにSqlPlusのコンストラクタに書くこともできます。

  val db = new SqlPlus( "oracle.jdbc.driver.OracleDriver"
      ,"jdbc:oracle:thin:@192.168.0.105:1521:ORCL"
      ,"scott"
      ,"tiger" )

実行するとこのようになります。

最初のforループは、EMP表のレコードを取ってきています。

Javaなので、値がnullだとnullと表示。

次のforループは、executeQuery(Class.forName(“SeeDo.Employee”))で引数にBeanクラスを指定して、レコードのデータをBeanクラスに格納して返します。

フレームワークのなかで引数で渡したBeanクラスのオブジェクトが生成されます。
printlnでArrayListの要素を出力すると、SeeDo.Employeeクラスで定義した toStrin 関数が呼び出されています。

しかし、setterがないので値が初期値になっています。

7369 SMITH CLERK 7902 1980-12-17 00:00:00.0 800 null 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00.0 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00.0 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00.0 2975 null 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00.0 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00.0 2850 null 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00.0 2450 null 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00.0 3000 null 20
7839 KING PRESIDENT null 1981-11-17 00:00:00.0 5000 null 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00.0 1500 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00.0 1100 null 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00.0 950 null 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00.0 3000 null 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00.0 1300 null 10
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning null
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setENAME(java.lang.String)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setSAL(java.math.BigDecimal)がメソッドがありません。
Warning SeeDo.Employeeクラスには、setCOMM(null)がメソッドがありません。
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]
[Employee empno:0,ename:null,job:null,mgr:0,hiredate:null,deptno:0,varsal:0]



Post Details

  • Post Title: ScalaでDBフレームワークによるDB操作ができた
  • Author: admin
  • Filed As: Java, 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.

コメントを残す