本文假设你已经知道什么是xsql.

1.hello xsql

1)准备工作

创建数据库用户并分配权限,这里就不详细说了。我已经有一个本地数据库的用户huchen.

在用户下创建表

-- Create table
create table XSQL_EMPLOYEE
(
  ID        NUMBER,
  LASTNAME  VARCHAR2(15),
  FIRSTNAME VARCHAR2(15),
  JOB       VARCHAR2(30)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

插入数据:

insert into xsql_employee (ID, LASTNAME, FIRSTNAME, JOB)
values (1, 'chen', 'hu', 'coder');
insert into xsql_employee (ID, LASTNAME, FIRSTNAME, JOB)
values (2, 'lijun', 'zhang', 'Director ');

设置数据库连接

在XSQLConfig.xml文件中找到connection节点,并根据你的数据库设置如下:

<connection name="xsql_test">
          <username>huchen</username>
          <password>huchen</password>
          <dburl>jdbc:oracle:thin:@localhost:1521:hcdb</dburl>
          <driver>oracle.jdbc.driver.OracleDriver</driver>
          <autocommit>false</autocommit>
</connection>

2)第一个xsql page

创建一个java web项目,在src目录下添加XSQLconfig.xml

在WebRoot目录下增加一个文件夹xsql,并在xsql文件夹下添加文件test1.xsql,在该文件下添加代码:

<?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>
</page>

访问http://localhost:8088/xsql_test/xsql/test1.xsql

将看到如下页面:

如果你的查询没匹配任何行,你又想在这种情况下执行另一个查询,你可以用

xsql:no-rows-query标签,他必须使用在xsql:query标签之下。如:

<?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 where id = 1111
<xsql:no-rows-query>
select * from xsql_employee
</xsql:no-rows-query>
</xsql:query>
</page>

2.writing xsql pages

1)查询数据库

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)显示参数

在前面的例子中,我们知道了如何关联参数,但是如果你想要参数包括在输出中,需要使用<xsql:include-param> 或者<xsql:include-request-params>

例:

<?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中。

在这种情况下,你必须为每一个显示的参数写代码,如果你想显示所有的参数,你可以用<xsql:include-request-params>标签

如:

<?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能够跨多个页面。

你可以通过<xsql:set-page-param>标签来明确的在你的页面中设置私有参数。

设置方法有两种,第一种直接指定参数值,第二种通过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

5)使用绑定变量

目前,我们使用的的都是通过{@param}这种方式引用参数,这种方式在解析的时候只是简单的字符串的替换,这种方式在某些情况下是很方便的,但是他并不会对sql进行优化.

让我们先来看下下面的例子:

<?xml version="1.0"?>
<page job="coder" firstname="hu" xmlns:xsql="urn:oracle-xsql" connection="xsql_test">
<xsql:query bind-params="job firstname">
select * from xsql_employee where job=? and firstname=?
</xsql:query>
</page>

这里我们没有用{@param}这种形式,而用了问号。在解析的时候,问号被按照<bind-params>属性中列出的参数顺序替代。

绑定变量使得优化sql语句变的简单,当你没有绑定变量的时候,sql优化器只能一次优化一个sql语句,优化器不知道将会有很多很多按照这种结构写出的sql,但是用绑定变量方式,sql优化器将预计会有很多同样结构的sql,在上面的例子中,优化器将知道会有很多按照职位和姓来查找员工.

转载于:https://www.cnblogs.com/huc87/archive/2009/07/20/1526986.html

oracle xsql 详解(一)相关推荐

  1. Oracle ASM 详解 收藏

    Oracle ASM 详解 ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也 ...

  2. oracle分区表编程,Oracle分区表详解

    当前位置:我的异常网» 编程 » Oracle分区表详解 Oracle分区表详解 www.myexceptions.net  网友分享于:2013-10-28  浏览:25次 Oracle分区表详解 ...

  3. oracle有哪两种内存结构,Oracle体系结构详解(物理构造,内存结构和逻辑结构)...

    当前位置:我的异常网» 数据库 » Oracle体系结构详解(物理构造,内存结构和逻辑结构 Oracle体系结构详解(物理构造,内存结构和逻辑结构) www.myexceptions.net  网友分 ...

  4. Oracle 冷备份详解【实战案例】

    Oracle 冷备份详解 --准备工作 select * from v$database; select file_name from dba_data_files; create tablespac ...

  5. oracle里面asm的作用,Oracle ASM 详解

    Oracle ASM 详解 ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也 ...

  6. Oracle 存储过程详解(上)

    目录 一.存储过程与存储函数的定义 二.创建 / 执行存储过程所需的权限 1.resource权限 2.create.execute procedure权限 三.创建 / 执行存储过程 四.变量与参数 ...

  7. Oracle 数据字典详解

    Oracle 数据字典详解 什么叫数据字典? 数据字典指的是描述数据的数据. 举个例子:我们在数据库里面创建了一个表,这个表位于哪个数据文件.这个表有哪些列.这个表的每一个列的数据类型.这个表的约束等 ...

  8. Oracle索引详解(索引的原理,创建索引,删除索引,修改索引等)

    Oracle索引详解 一.索引概述 Oracle作为关系型数据库,用户查找数据与行的物理位置无关,表中的每一行均用一个ROWID来标识,当Oracle数据库中存储海量的记录时,就意味着有大量的ROWI ...

  9. oracle list 分区详解,ORACLE分区表详解

    此文从以下几个方面来整理关于分区表的概念及操作:1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作. (1.) 表空间及分区表 ...

最新文章

  1. Redis Key资源占用情况的可视化分析
  2. Oracle错误 1053: 该服务没有响应启动或控制请求
  3. 【pmcaff专栏】项目管理失败?如何避免?
  4. C# webkit内核 网页填表
  5. Java并发优化思路
  6. jquery cookie的用法
  7. PHP框架最低支持PHP版本
  8. 不同调制方式的包络和功率谱
  9. 74系列相关芯片说明
  10. sodp软件如何导入多个工作面信息_6款堪称业界良心的软件,好用到想为它们疯狂打call!...
  11. 电脑文件怎么加密?第一种方法最简单
  12. python 爬取豆瓣的美剧
  13. C#图像处理:在图片上写字,文字位置居中问题
  14. 一文看懂文旅地产数字转型三大战略
  15. sizeof的用法总结
  16. 计算机相关专业提升学历的解决方案(硕士研究生)
  17. gps定位信息mysql_GPS定位数据库表设计
  18. oracle asm中candidate,【Oracle ASM】关于asm实例与db实例中的磁盘状态_详细分析过程...
  19. Nacos+AspnetCore+Ocelot实战编码
  20. python决策树剪枝_决策树及其剪枝原理

热门文章

  1. SQL查找是否“存在“,别再count了!
  2. logback为日志配置颜色
  3. 第十八届浙大城市学院程序设计竞赛(同步赛)签到题ABDFGJL
  4. 【CCCC】L3-026 传送门 (30分),splay(待复盘)
  5. html中倒计时精确到毫秒,倒计时功能 精确到毫秒
  6. jquery的DOM节点操作(替换元素节点)
  7. SQL Server 删除数据表数据
  8. C++ #include iostream #include iostream.h #include string.h区别及作用
  9. opencv 实现图像高斯金字塔
  10. 教授先生带你学习链表:双向链表3