用途
Sql
标记主要用于处理与数据库相关的操作在
<
Sql
>
与
</
Sql
>
标记之间可以插入任何
静态的
SQL
语句这些
SQL
语句将会被发送到数据库引擎中去并被执行同时
Sql
标记
还可以配合
SqlParam
标记一起使用创建动态的
SQL
语句
Sql
标记可以通过三种方式与
数据库系统建立连接第一种方式是直接使用现存的
JDBC Connection
对象
(java.sql.Connection
接口
)
第二种方法是使用
J2EE Data Source(javax.sql.DataSource)
对象
这是一个
JNDI
服务对象第三种方法是使用指定的
JDBC
数据库驱动程序与数据库服务的
URL
地址与数据库服务器建立连接这三种方法我们都会在下面的例子中涉及
Sql
标记可以包含在
Transaction
标记中这时
Sql
标记体内的操作被当作事务的一部
分执行这个事务中的操作一起被执行如果每一个操作都成功了那么所有的状态改变
都将成为事实如果有任何一个操作失败了那么整个操作就会失败这个事务所涉及的
状态的改变都不会起任何作用而保持原状
语法
<
sql
…
>
sql statement with optional
<
sqlparam
…
/>
…
</
sql
>
属性
connection
指定
Connection
对象的名称
id
执行
SQL
语句所返回的记录集的名字就是
id
属性的值如果执行
SQL
语句后不
返回任何有效的记录集那么这个属性将会被忽略
scope
该属性类似于
JavaBeans
的
Scope
属性可以取的值为
Page Session Request
Application
等
datasrc
指定数据源的名字该名字代表一个
JNDI
服务也就是说我们可以把数据
源作为一个
JNDI
服务发布在
datasrc
属性中指定这个
JNDI
服务的名字就可以访问此
数据源了
username
指定访问数据库所需要的用户名
password
指定访问数据库所需要的密码
driver
指定访问数据库所需要的驱动程序名例如
jdbc.odbc.JdbcOdbcDriver
url
指定数据源的标示例如
jdbc:odbc:test
TLD
文件
<
tag
>
<
name
>
sql
</
name
>
<
tagclass
>
allaire.taglib.SqlTag
</
tagclass
>
<
teiclass
>
allaire.taglib.SqlTei
</
teiclass
>
<
bodycontent
>
JSP
</
bodycontent
>
<
attribute
>
<
name
>
id
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
false
</
rtexprvalue
>
</
attribute
>
<
attribute
>
<
name
>
scope
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
false
</
rtexprvalue
>
</
attribute
>
<
attribute
>
<
name
>
driver
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
true
</
rtexprvalue
>
</
attribute
>
<
attribute
>
<
name
>
url
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
true
</
rtexprvalue
>
</
attribute
>
<
attribute
>
<
name
>
datasrc
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
true
</
rtexprvalue
>
</
attribute
>
<
attribute
>
<
name
>
connection
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
true
</
rtexprvalue
>
</
attribute
>
<
attribute
>
<
name
>
username
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
true
</
rtexprvalue
>
</
attribute
>
<
attribute
>
<
name
>
password
</
name
>
<
required
>
false
</
required
>
<
rtexprvalue
>
true
</
rtexprvalue
>
</
attribute
>
</
tag
>
用法示例
<%@
page
import
=”
java.sql.*”
%>
<%@
page
import
=
”javax.sql.*
allaire.taglib.
*”
%>
<%@
taglib
uri
=
“jruntags”
prefix
=
“jrun”
%>
<%
Class.forName(
“jdbc.odbc.JdbcOdbcDriver”
);
Connection con =DriverManager.getConnection(
“jdbc:odbc:test”
”sa” ””);
%>
<
jrun:sql
connection
=”
<%=
con
%>
”
id
=
“q1”
>
SELECT * FROM goods
</
jrun:sql
>
<
jrun:sql
driver
=
“jdbc.odbc.JdbcOdbcDriver ”
url
=
” jdbc:odbc:test”
id
=
“q2”
username
=
”sa”
password
=
””
>
SELECT * FROM goods
</
jrun:sql
>
<%– sql usesjava:comp/env/jdbc/dsn1 to lookup a datasource –%>
<
jrun:sql
datasrc
=
“dsn1”
id
=
“q3”
>
SELECT * FROM goods
</
jrun:sql
>
<%– you can enumerate theQueryTable by: –%>
<
jrun:param
id
=
“q3”
type
=
“QueryTable”
/>
<
jrun:foreach
item
=
“x”
group
=”
<%=
q3.Names
%>
”
>
<%=
x
%>
<
br
>
</
jrun:foreach
>
<
jrun:foreach
group
=”
<%=
q3
%>
”
>
<
jrun:foreach
item
=
“y”
group
=”
<%=
q3.Values
%>
”
>
<%=
y
%>
<
br
>
</
jrun:foreach
>
</
jrun:foreach
>
<%– OR –%>
<
jrun:param
id
=
“q3”
type
=
“QueryTable”
/>
<
jrun:foreach
group
=”
<%=
q3
%>
”
>
<%
int
count = q3.getColumnCount();
for
(
int
i = 0;i < count;i += 1)
{
%>
<%=
q3.get(i)
%>
<
br
>
<%
}
%>
</
jrun:foreach
>
<%– OR –%>
<
jrun:param
id
=
“q3”
type
=
“QueryTable”
/>
<%
while
(q3.next())
{
%>
<
jrun:foreach
item
=
“y”
group
=”
<%=
q3.Values
%>
”
>
<%=
y
%>
<
br
>
</
jrun:foreach
>
<%
}
%>
<%– OR if you want to usecolumn names… –%>
<
jrun:param
id
=
“q3”
type
=
“QueryTable”
/>
<
jrun:foreach
group
=”
<%=
q3
%>
”
>
<%=
q3.get(
“id”
)
%>
<
br
>
<%=
q3.get(
“lastname”
)
%>
<
br
>
<%=
q3.get(
“firstname”
)
%>
<
br
>
</
jrun:foreach
>
<%– OR if you want to usecolumn index… –%>
<
jrun:param
id
=
“q3”
type
=
“QueryTable”
/>
<
jrun:foreach
group
=”
<%=
q3
%>
”
>
<%=
q3.get(1)
%>
<
br
>
<%=
q3.get(2)
%>
<
br
>
<%=
q3.get(3)
%>
<
br
>
</
jrun:foreach
>
代码解释
在上面的实例中读者只需要了解
Sql
标记是如何与数据源建立连接的就可以了第
一种情况首先创建一个
Connection
接口的实例对象然后指定
Sql
标记的
connection
属
性的值为这个
Connection
对象第二种情况直接指定
Sql
标记的
driver
属性和
url
属性的
值
Sql
标记就利用这些信息与数据库建立连接第三种情况指定
datasrc
属性的值为
JNDI
服务名
dsn1 JSP
引擎会自动寻找
(lookup)
这个服务然后通过它来访问数据源与数据源
建立连接以后就可以把
SQL
语句发送到数据源中去执行的结果将会保存到一个记录集
对象中这个记录集对象的名字就是
Sql
标记
id
属性的值接下来就是利用各种方法把
记录集对象中的数据输出来这里用到了
ForEach
标记和
SqlParam
标记的功能我们将在
下面分别介绍这两个标记的功能。
。。。。。