xsql:query标签是用来从数据库检索信息的。在前面的例子中,我们都简单的把一个sql放在该标签中,这个标签中只能放select语句,如果你放一个insert语句在该标签中,那么xsql page processor将拒绝它。
在上面的例子中,查询语句查出的结果被转变成xml标签替代了xsql:query标签,表中的列名在每一行中替换成了xml元素的标签名字。如果你不喜欢列名,你可以用”select id as employee_id来替代。
特别是当你的输出列名中有特殊字符的时候,如:
select id, to_char(hiredate, ‘YYYY-MON’) from xsql_employee
如果你这么写,你将得到一个错误,第二列包含了”(“,这是xml标签名不能允许的,所以你需要给他一个别名,如:
select id, to_char(hiredate, ‘YYYY-MON’) as hiredate from xsql_employee
你同样可以设置程序自己生成的rowset和row标签,使用xsql:query的row-element和rowset-element属性来设置。如:
xml version="1.0"
?>
<
xsql:query
connection
="xsql_test"
xmlns:xsql
="urn:oracle-xsql"
row-element
="EMPLOYEES"
rowset-element
="EMPLOYEE_LIST"
>
select * from xsql_employee
xsql:query
>
运行结果如下:
如果你需要在同一个page里使用多个xsql:query,则他们需要包含在一个跟节点下。因为一个xml文档必须要有一个根节点。
如:
xml version="1.0"
?>
xml-stylesheet type=text/xsl" href="helloworld.xsl"
?>
<
page
connection
="xsql_test"
xmlns:xsql
="urn:oracle-xsql"
>
<
xsql:query
>
select * from xsql_employee
xsql:query
>
<
xsql:query
>
select * from xsql_employee
xsql:query
>
page
>
3.xsql parameters
xsql分为4种参数:
a.request parameters
b.page-private parameters
c.stylesheet parameters
d.session parameters
e.cookies
后面将说明各种类型的参数的用处。但是在此之前,我们的第一步是知道怎样去关联参数和参数值怎么在xml中呈现的。
1)关联参数
xsql page processor通过寻找{@paramName}来解析xsql页的参数,当他找到这种形式的参数时,它将用参数的值来替换{@paramName}。
下面来看一个例子:
xml version="1.0"
?>
<
page
xmlns:xsql
="urn:oracle-xsql"
connection
="{@conn}"
>
<
xsql:query
>
select {@fields} from {@tables}
xsql:query
>
page
>
如果你键入url不带参数,你将会的到报错信息。
键入以下url,将返回表中所有行
http://localhost:8088/xsql_test/xsql/very-unsecure.xsql?conn=xsql_test&fields=*&tables=xsql_employee
参数必须放在xsql:动作标签内,不然xsql解析器不会去替换参数的。
如果你把刚才xsql文档改为如下:
xml version="1.0"
?>
<
page
xmlns:xsql
="urn:oracle-xsql"
connection
="{@conn}"
>
<
xsql:query
>
select {@fields} from {@tables}
xsql:query
>
<
conn
>
{@conn}
conn
>
<
fields
>
{@fields}
fields
>
<
tables
>
{@tables}
tables
>
page
>
2)显示参数
在前面的例子中,我们知道了如何关联参数,但是如果你想要参数包括在输出中,需要使用或者
例:
xml version="1.0"
?>
<
page
xmlns:xsql
="urn:oracle-xsql"
connection
="{@conn}"
>
<
xsql:include-param
name
="conn"
/>
<
xsql:include-param
name
="fields"
/>
<
xsql:include-param
name
="tables"
/>
page
>
这个操作将输出所有的参数到xml中。
在这种情况下,你必须为每一个显示的参数写代码,如果你想显示所有的参数,你可以用标签
如:
xml version="1.0"
?>
<
page
xmlns:xsql
="urn:oracle-xsql"
connection
="{@conn}"
>
<
xsql:include-request-params
/>
page
>
3)参数类型
a)request parameters
在上面的例子中,我们用到的就是请求参数。这很好理解,请求参数是是http请求的一部分。刚才的例子中我们用到的是http的get方法获得的request,post方法也可以获得参数。例:
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
="Content-Type"
content
="text/html; charset=UTF-8"
>
<
title
>
post param form
title
>
head
>
<
body
>
<
form
action
="xsql/very-unsecure.xsql"
method
="post"
>
<
table
border
="0"
>
<
tr
>
<
td
>
connection:
td
>
<
td
><
input
type
="text"
name
="conn"
/>
td
>
tr
>
<
tr
>
<
td
>
fields:
td
>
<
td
><
input
type
="text"
name
="fields"
/>
td
>
tr
>
<
tr
>
<
td
>
tables:
td
>
<
td
><
input
type
="text"
name
="tables"
/>
td
>
tr
>
<
tr
>
<
td
colspan
="2"
align
="center"
>
<
input
name
="submitButton"
type
="submit"
value
="select"
/>
td
>
tr
>
table
>
form
>
body
>
html
>
这个页面将获得同样的结果。
b)Page-Private Parameters
page-private parameters是当前页面的私有的参数,不像session parameters和cookie parameters能够跨多个页面。
你可以通过标签来明确的在你的页面中设置私有参数。
设置方法有两种,第一种直接指定参数值,第二种通过sql返回一个参数值。
如:
xml version="1.0"
?>
<
page
xmlns:xsql
="urn:oracle-xsql"
connection
="xsql_test"
>
<
xsql:set-page-param
name
="lastname"
value
="chen"
/>
<
xsql:set-page-param
name
="job"
>
select job from xsql_employee where lastname='{@lastname}'
xsql:set-page-param
>
<
xsql:include-param
name
="lastname"
/>
<
xsql:include-param
name
="job"
/>
<
xsql:query
>
select * from xsql_employee where job='{@job}'
xsql:query
>
page
>
c)session parameters
略
d)cookie
略
4)默认参数
在上面的例子中,我们的xsql依赖于参数的设定或者是request参数,有时,我们希望给他一个默认值。
如:
xml version="1.0"
?>
<
page
fields
="*"
conn
="xsql_test"
tables
="xsql_employee"
xmlns:xsql
="urn:oracle-xsql"
connection
="{@conn}"
>
<
xsql:include-request-params
/>
<
xsql:query
>
select {@fields} from {@tables}
xsql:query
>
page
>
输入http://localhost:8088/xsql_test/xsql/very-unsecure.xsql