タプル
タプル (Tuples)は、複数の値を返したいけどコンテナクラスを定義したくないときに使えます。
タプルは複数の値を保持する組み込みのクラスで、要素数に応じてそれぞれ別のクラスがあり、必要な要素数にあわせて対応するタプルと単に()内に要素をカンマ区切りで並べるタプルがあります。
データベースでSELECTした結果をタプルに入れてみました。
import java.sql.{DriverManager, Connection, Statement, ResultSet,SQLException} import java.util.Date object SqlSelect2 { var jdbcURL = "jdbc:oracle:thin:@192.168.0.105:1521:ORCL" def main(args : Array[String]) : Unit = { 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()){ var oneTuple:Tuple7[Int, String, String,Int,Date,Int,Int] = Tuple(rs.getInt("empno") , rs.getString("ename") , rs.getString("job") , rs.getInt("mgr") , rs.getDate("hiredate") , rs.getInt("deptno") , rs.getInt("sal") ) println(oneTuple) // var manyTuple = (rs.getInt("empno") , rs.getString("ename") , rs.getString("job") , rs.getInt("mgr") , rs.getDate("hiredate") , rs.getInt("deptno") , rs.getInt("sal") ) println(manyTuple._1,manyTuple._2,manyTuple._3) } 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() } } } }
タプルからの値の取り出しは「_n」メソッドを呼び出せばよいだけです 。
n は対象とするタプル要素の位置を表す引数であり、_1 は1 番目、_2 は 2 番目、等々です。
実行結果は以下のとおり
(7566,JONES,MANAGER,7839,1981-04-02,20,2975) (7566,JONES,MANAGER) (7654,MARTIN,SALESMAN,7698,1981-09-28,30,1250) (7654,MARTIN,SALESMAN) (7698,BLAKE,MANAGER,7839,1981-05-01,30,2850) (7698,BLAKE,MANAGER) (7782,CLARK,MANAGER,7839,1981-06-09,10,2450) (7782,CLARK,MANAGER) (7788,SCOTT,ANALYST,7566,1987-04-19,20,3000) (7788,SCOTT,ANALYST) (7839,KING,PRESIDENT,0,1981-11-17,10,5000) (7839,KING,PRESIDENT) (7844,TURNER,SALESMAN,7698,1981-09-08,30,1500) (7844,TURNER,SALESMAN) (7876,ADAMS,CLERK,7788,1987-05-23,20,1100) (7876,ADAMS,CLERK) (7900,JAMES,CLERK,7698,1981-12-03,30,950) (7900,JAMES,CLERK) (7902,FORD,ANALYST,7566,1981-12-03,20,3000) (7902,FORD,ANALYST) (7934,MILLER,CLERK,7782,1982-01-23,10,1300) (7934,MILLER,CLERK)
コメントを残す
コメントを投稿するにはログインしてください。