1.调用存储过程:
(1)在action中,先将request和response封装
HttpRequest V_HttpRequest = new HttpRequest(request, response);
(2)指定调用哪个存储过程
V_HttpRequest.resetParameter("I_Operator","P_XXC_TEST.XXC_Test");//第一个参数是定死的,表示去调用存储过程的意思,第二个参数点的左边是包名,右边是函数名
(3)给存储过程的参数赋值
V_HttpRequest.resetParameter("I_ID",Util.nvl(V_HttpRequest.getParameter( "ID" )).trim());//第一个参数必须和存储过程的形参名一样,第二个参数是页面传递的具体值
(4)执行存储过程
SelectProc V_ResultProc = new SelectProc(V_HttpRequest);//具体执行调用存储过程的步骤是在这个类的构造函数中执行
window.top.opener.location.reload();//刷新父窗口
window.close();
3.调用.xml文件中的查询语句
(1)指定调用哪个xml文件里的sql语句
V_HttpRequest.resetParameter("xmlfile","//page//test//gdf//gdf.xml");//第一个参数是写死的,表示去调用xml文件,第二个参数是这个xml文件的具体路径
(2)指定调用这个xml文件里哪个sql语句
V_HttpRequest.resetParameter("aliassql", "getEdit");//第一个参数是写死的,表示去调用sql语句,第二个参数是下面xml文件里sql标签中的name属性,对上了则就调用这个sql语句
(3)创建一个SelectResult实例,并调用方法,执行上面设置好的sql语句。
SelectResult V_Result = new SelectResult(V_HttpRequest);//创建实例
DataSet V_DataSet = V_Result.getDataSet();//一般xml文件里执行的都是查询语句,所以会返回一个DataSet数据集,
(4)遍历数据集(遍历数据集必须要注意的是,开始的时候指针是指向第一行之前的也就是没数据的)
if (V_DataSet == null) {//判断数据集是否为NULL
out.println("<script>alert('错误信息:\\n查找需要修改的数据失败!');window.close();</script>");
return;
}
V_DataSet.firstRecord();//将指针指向第一条数据,或者 V_DataSet.goTop(); V_DataSet.next();
while (V_DataSet.next()) {//循环
ID = Util.nvl(V_DataSet.getString("ID"));
...
}
存放拼接sql语句的xml文件
<?xml version="1.0" encoding="GBK" ?>
<query-config>
<query name="test">
<sql name="fileDown">
Select * From test t where 1=1 $xxc_test
<exp name="xxc_test" tag-name="where" target="xxc_test"/>
</sql>
<sql name="getCountSql">
Select count(*) cnt From test t where 1=1 $xxc_test
<exp name="xxc_test" tag-name="where" target="xxc_test"/>
</sql>
<sql name="getAllList">
Select * From
(Select t.*, Rownum rn From test t where 1=1 $xxc_test)
Where $MRownum
<exp name="xxc_test" tag-name="where" target="xxc_test"/>
<exp name="MRownum" tag-name="where" target="MRownum"/>
</sql>
<sql name="getEdit">
Select t.* From test t where 1=1 $xxc_test
<exp name="xxc_test" tag-name="where" target="xxc_test"/>
</sql>
<where name="xxc_test">
<start-with>and</start-with><!-- 这边空格没用 -->
<field name="name" type="value" prefix="and name like '%$name%' " valid="false"/><!-- 首先程序会去判断前台传过来的参数是否为null或空字符串,如果是的话就不把条件语句加到where后面,反之就加 -->
<field name="age" type="value" prefix="and age like '%$age%' " valid="false"/>
<field name="ID" type="value" prefix="and ID = '$ID' " valid="false"/><!-- $ID表示取name='id'的值 -->
<field name="AGE1" type="value" prefix="and t.AGE >= $AGE1 " valid="false"/>
<field name="AGE2" type="value" prefix="and t.AGE <= $AGE2 " valid="false"/>
<field name="NAME" type="value" prefix="and t.NAME like '%$NAME%' " valid="false"/>
</where>
<where name="MRownum">
<field name="start" type="value" prefix="and rn >= $start" valid="false"/>
<field name="endrow" type="value" prefix="and rn <= $endrow " valid="false"/>
</where>
</query>
</query-config>
拿<sql name="fileDown">这个标签里的exp标签来做说明:
Select * From test t where 1=1 $xxc_test
$xxc_test表示会去当前exp标签中找name="xxc_test"的exp标签,
exp标签中的tag-name="where" target="xxc_test" 这两个表示会去找下面的 name="xxc_test" 的where标签