タプル (Tuples)

Posted 2010年11月17日 by

タプル

タプル (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)


Post Details

  • Post Title: タプル (Tuples)
  • 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.

コメントを残す