SELECT文で得たレコードを画面に表示したいとき、レコード数が多いとページ繰りします。
このときSELECT文にOracleであればOracleのROW_NUMBER関数を使うことができます。
しかし、MySQLにはOracleのROW_NUMBER関数がありません。
たとえば、次のようなSELECT文があります。
select EMPNO,ENAME,LOC from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO order by ENAME
このSELECT文にrow_numberを付けるには次のようなSQL文で可能です。
SELECT文最後のWHERE句でrownum > 4 とすることで、5行目以降を取りだすことができます。
select dummy3.* from (select @i:=@i+1 as rownum,dummy2.* from (select @i:=0) dummy1, (select EMPNO,ENAME,LOC from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO order by ENAME) dummy2) dummy3 where rownum >4
この仕組みを組み込んだ関数が、executeQueryPaging(3,5)です。
引数3と5で、3行目から5行目のレコードを取り出します。
package test import seedo.database._ object sample04 { // val driverName = "oracle.jdbc.driver.OracleDriver" val driverName = "com.mysql.jdbc.Driver" // val dns = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL" val dns = "jdbc:mysql://127.0.0.1:3306/seedo?useUnicode=true&characterEncoding=UTF-8" val user ="scott" val password ="tiger" var dbx:Db = null def scala1 :Unit = { try { dbx = new Db(driverName, dns, user, password) dbx.select("empno,ename,loc").from("EMP").innerJoin("DEPT", "EMP.DEPTNO=DEPT.DEPTNO").orderBy("ename") println(dbx.toString) println(dbx.getSql) dbx.executeQueryPaging(3,5).foreach(record => { record.foreach(col => { print(" " + col) }) println }) println(" --- ColumnNameList") dbx.getColumnNameList.foreach(c =>{ print(" " + c) }) println } catch { case e:Exception => {println(e.getMessage)} } finally { dbx.close } } def main(args : Array[String]) : Unit = { scala1 } }
結果は次のとおり。
JDBC Driver:MySQL-AB JDBC Driver Version:mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} ) Database:MySQL Version:5.5 select empno,ename,loc from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO order by ename select empno,ename,loc from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO order by ename 3.0 7698 BLAKE CHICAGO 4.0 7782 CLARK NEW YORK 5.0 7902 FORD DALLAS --- ColumnNameList row_num empno ename loc
コメントを残す
コメントを投稿するにはログインしてください。