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]
コメントを残す
コメントを投稿するにはログインしてください。