HelloWorldDb2 クラスに引数を渡して、引数の値をSELECT文の条件にします。
引数の渡し方には2通りあります。
最初の方式は、HTMLファイルのDIVタグのクラス属性に整数値の2500を記述します。
class=”seedo:ews.HelloWorldDb2:tb:2500″
これを、where(“SAL > ?”,sal)としてwhere関数の可変長引数として渡します。
セキュリティ上、SQLインジェクションされないように上記のように記述します。
このようにHTMLファイルの中の固定値で引数が書けます。
JDBCアクセスなので、try と catch で例外処理を捉えます。
finally でsql.close 関数を呼び出すことで、SQLコネクションをコネクションプールに返します。
close関数がないと、コネクションプールを消費し続け、最後にMAX値まで達するとSQLエラーの例外が発生します。
scalaだと、明示的にclose関数を記述しないでも内部でclose関数を呼ぶコードも書けます。
トライしてみてください。
package ews import java.util.{HashMap,Date} import scala.collection.JavaConversions._ import scala.collection.immutable._ import scala.xml._ import seedo.database._ class HelloWorldDb2 { var tag:String = null // Replaced original tag def setTag(tg:String): Unit = {tag = tg} var parameterMap:HashMap[String,Array[String]] = null // Parameter from request of servlet def setParameterMap(pm:HashMap[String,Array[String]]) : Unit = {parameterMap = pm} def recx(record:Array[Any]) :Node = { var nodes = Queue.empty[Node] record.foreach{(fx) => nodes += <TD>{fx}</TD>} return <TR>{nodes}</TR> } // Function one argument def tb(sal:Int) : String = { val deptno = 30 var sql:Db = null try { sql = new Db sql.select("EMPNO,ENAME,SAL,DEPTNO,JOB,MGR") .from("EMP") .where("SAL > ?",sal) .or("DEPTNO = ?",deptno) .orderBy("EMPNO") val re = sql.executeQuery var nodes = Queue.empty[Node] re.foreach{(rec) => nodes += recx(rec)} val xml = <table border="1">{nodes}</table> return "HelloWorldDb2 " + new Date + xml.toString } catch { case e:Exception =>{ throw e } } finally { if(sql != null)sql.close } } }
HTLMファイルの中身です。
<!doctype html> <HTML> <HEAD> <title>Home</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </HEAD> <BODY> <h2>Example5</h2> The current time is <div class="seedo:ews.HelloWorldDb2:tb:2500">emp</div>. </BODY> </HTML>
結果
結果は以下のとおり
コメントを残す
コメントを投稿するにはログインしてください。