开源j2ee 框架bbossgroups 1.0 数据库操作标签初探
看看开源j2ee 框架bbossgroups 中如何使用dbutil,batchutil 标签来实现数据库的 预编译/普通insert , update , delete ,预编译/普通批处理操作 ,比较简单也比较实用。
文章分三部分介绍:
- 预编译/普通insert , update , delete 操作
- 执行预编译/普通批处理操作标签
- 连接池配置
查看全文:http://yin-bp.iteye.com/admin/blogs/648161
[1]预编译/普通insert , update , delete 操作
1.1.1 Insert 操作
<%@ page contentType = "text/html; charset=GBK" language = "java" import = "java.sql.*,java.util.List" errorPage = "" %>
1.1.1.1 导入标签定义文件
<%@ taglib uri = "/WEB-INF/pager-taglib.tld" prefix = "pg" %>
<!--
dbutil 标签实现 insert 操作
statement: 数据库 insert 语句
dbname:insert 的相应数据库名称,在 poolman.xml 文件中进行配置
-->
1.1.1.2 定义预编译 sql 语句
<%
String object_id = "1" ;
String owner = "duoduo" ;
String object_name = "table_insert" ;
String created = "2010-03-12 16:52:10" ;
String last_ddl_time = "2010-03-12 16:52:11" ;
String sql = "insert into sqltest(object_id,owner,object_name,created,last_ddl_time) values(#[object_id],#[owner],#[object_name],#[created],#[last_ddl_time])" ;
%>
Sql 语句中的变量 #[object_id],#[owner],#[object_name],#[created],#[last_ddl_time]
的值和类型将在标签 pg:sqlparam 中指定
< html >
< head >
< title > 测试在 dbutil 标签上直接执行数据库插入操作 </ title >
</ head >
< body >
< table >
1.1.1.3 Dbutil 执行预编译插入操作
< pg:dbutil statement = "<%= sql %> "
dbname = "bspf"
pretoken = "#\\[" endtoken = "\\]"
action = "insert" >
statement 属性指定了先前定义的预编译插入语句
dbname 为数据库连接池的名称
pretoken = "#\\[" endtoken = "\\]" 分别指定了变量的分界符
action=insert 指定了本次执行的是 insert 操作。
1.1.1.4 指定各变量的值和类型
< pg:sqlparam name = "object_id" value = "<%= object_id %> " type = "int" />
< pg:sqlparam name = "owner" value = "<%= owner %> " type = "string" />
< pg:sqlparam name = "object_name" value = "<%= object_name %> " type = "string" />
< pg:sqlparam name = "created" value = "<%= created %> " type = "date" />
< pg:sqlparam name = "last_ddl_time" value = "<%= last_ddl_time %> " type = "timestamp" />
</ pg:dbutil >
<%= dbutil_result %>
Name 属性指定变量的名称,
Value 属性指定变量的值
Type 属性指定变量的类型,如果没有指定那么默认为字符串类型
dbutil_result 存放 insert 操作所插入的记录数
</ table >
</ body >
</ html >
上面说明的是预编译操作,要进行普通插入操作:
< pg:dbutil statement = "<%= sql %> "
dbname = "bspf"
pretoken = "#\\[" endtoken = "\\]"
action = "insert" >
</ pg:dbutil >
<%= dbutil_result %>
其中的 sql 为一条完成的插入语句即可。例如: insert into table ( name ) values(‘duoduo’) 。
1.1.2 update 操作
<%@ page contentType = "text/html; charset=GBK" language = "java" import = "java.sql.*,java.util.List" errorPage = "" %>
1.1.2.1 导入标签定义文件
<%@ taglib uri = "/WEB-INF/pager-taglib.tld" prefix = "pg" %>
<!--
dbutil 标签实现 update 操作
statement: 数据库 update 语句
dbname:update 的相应数据库名称,在 poolman.xml 文件中进行配置
-->
1.1.2.2 定义预编译 sql 语句
<%
String object_id = "1" ;
String created = "2010-03-12 12:43:54" ;
String sql = "update sqltest set created=#[created] where object_id=#[object_id]" ;
%>
Sql 语句中的变量 #[created], #[object_id] 的值和类型将在标签 pg:sqlparam 中指定
< html >
< head >
< title > 测试在 dbutil 标签上直接执行数据库 update 操作 </ title >
</ head >
< body >
< table >
1.1.2.3 Dbutil 执行预编译修改操作
< pg:dbutil statement = "<%= sql %> "
dbname = "bspf"
pretoken = "#\\[" endtoken = "\\]"
action = "update" >
statement 属性指定了先前定义的预编译 update 语句
dbname 为数据库连接池的名称
pretoken = "#\\[" endtoken = "\\]" 分别指定了变量的分界符
action=update 指定了本次执行的是 update 操作。
1.1.2.4 指定各变量的值和类型
< pg:sqlparam name = "object_id" value = "<%= object_id %> " type = "int" />
< pg:sqlparam name = "created" value = "<%= created %> " type = "timestamp" />
</ pg:dbutil >
<%= dbutil_result %>
Name 属性指定变量的名称,
Value 属性指定变量的值
Type 属性指定变量的类型,如果没有指定那么默认为字符串类型
dbutil_result 存放 update 操作所修改的记录数
</ table >
</ body >
</ html >
上面说明的是预编译操作,要进行普通 update 操作:
< pg:dbutil statement = "<%= sql %> "
dbname = "bspf"
pretoken = "#\\[" endtoken = "\\]"
action = "update" >
</ pg:dbutil >
<%= dbutil_result %>
其中的 sql 为一条完整的 update 语句即可。例如: update table set name=‘duoduo’ 。
1.1.3 Delete 操作
<%@ page contentType = "text/html; charset=GBK" language = "java" import = "java.sql.*,java.util.List" errorPage = "" %>
1.1.3.1 导入标签定义文件
<%@ taglib uri = "/WEB-INF/pager-taglib.tld" prefix = "pg" %>
<!--
dbutil 标签实现 delete 操作
statement: 数据库查询语句
dbname: delete 的相应数据库名称,在 poolman.xml 文件中进行配置
-->
1.1.3.2 定义预编译 sql 语句
<%
String object_id = "15" ;
String sql = "delete from sqltest where object_id=#[object_id] " ;
%>
Sql 语句中的变量 #[object_id] 的值和类型将在标签 pg:sqlparam 中指定
< html >
< head >
< title > 测试在 dbutil 标签上直接执行数据库 delete 操作 </ title >
</ head >
< body >
< table >
1.1.3.3 Dbutil 执行预编译 delete 操作
< pg:dbutil statement = "<%= sql %> "
dbname = "bspf"
pretoken = "#\\[" endtoken = "\\]"
action = " delete" >
statement 属性指定了先前定义的预编译 delete 语句
dbname 为数据库连接池的名称
pretoken = "#\\[" endtoken = "\\]" 分别指定了变量的分界符
action= delete 指定了本次执行的是 delete 操作。
1.1.3.4 指定各变量的值和类型
< pg:sqlparam name = "object_id" value = "<%= object_id %> " type = "int" />
</ pg:dbutil >
<%= dbutil_result %>
Name 属性指定变量的名称,
Value 属性指定变量的值
Type 属性指定变量的类型,如果没有指定那么默认为字符串类型
dbutil_result 存放 delete 操作所删除记录数
</ table >
</ body >
</ html >
上面说明的是预编译操作,要进行普通 delete 操作:
< pg:dbutil statement = "<%= sql %> "
dbname = "bspf"
pretoken = "#\\[" endtoken = "\\]"
action = " delete" >
</ pg:dbutil >
<%= dbutil_result %>
其中的 sql 为一条完整的 delete 语句即可。例如: delete frome table where name=‘duoduo’ 。
[2]执行预编译/普通批处理操作标签
相关的一组标签:batchutil,statement,batch,sqlparam
通过这组标签我们可以实现以下功能:
普通批处理操作
预编译批处理操作
下面详细说明上述功能。
1.1.1 普通批处理操作
<%@ page contentType="text/html; charset=GBK" language="java"%>
1.1.1.1 导入标签定义文件
<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>
<!--
batchutil标签实现数据库批处理操作
statement:指定批处理语句
dbname:批处理语句执行的对应的数据库连接池名称,在poolman.xml文件中进行配置
-->
1.1.1.2 定义一组要进行批处理操作的sql语句
<% String sql = "update sqltest set batch='1' where object_id=1";
String sql1 = "update sqltest set batch='2' where object_id=1";
String sql2 = "update sqltest set batch='3' where object_id=1";
String sql3 = "update sqltest set batch='4' where object_id=1";
String sql4 = "update sqltest set batch='5' where object_id=1";
%>
<html>
<head>
<title>测试在batchutil标签上直接执行数据库批处理操作</title>
</head>
<body>
<table>
1.1.1.3 使用batchutil标签执行批处理操作
<pg:batchutil dbname="bspf" type="common">
<pg:statement sql="<%=sql %>" />
<pg:statement sql="<%=sql1 %>" />
<pg:statement sql="<%=sql2 %>" />
<pg:statement sql="<%=sql3 %>" />
<pg:statement sql="<%=sql4 %>" />
</pg:batchutil>
</table>
</body>
</html>
1.1.2 预编译批处理操作
<%@ page contentType="text/html; charset=GBK" language="java"%>
1.1.2.1 导入标签定义文件
<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>
<!--
batchutil标签实现数据库预编译批处理操作
statement:指定预编译批处理语句
dbname:预编译批处理语句执行的对应的数据库连接池名称,在poolman.xml文件中进行配置
-->
1.1.2.2 定义一组要进行预编译批处理操作的sql语句和参数组
预编译批处理操作可以是多条不同的预编译sql语句,也可以是同一条sql语句的多个不同的绑定变量参数组,也可以是混合的情况。下面我们使用一条sql语句和5组不同的绑定参数的情况做为示例来说明各种不同的情况。
<%
String object_id = "1";
String created = "2010-03-12 12:43:54";
String created1 = "2010-03-13 12:43:54";
String created2 = "2010-03-14 12:43:54";
String created3 = "2010-03-15 12:43:54";
String created4 = "2010-03-16 12:43:54";
String sql = "update sqltest set created=#[created] where object_id=#[object_id]";
%>
<html>
<head>
<title>测试在batchutil标签上直接执行数据库预编译批处理操作</title>
</head>
<body>
<table>
1.1.2.3 使用batchutil标签执行预编译批处理操作
<pg:batchutil dbname="bspf" type="prepared">
<pg:statement sql="<%=sql %>" pretoken="#\\[" endtoken="\\]">
1.1.2.3.1 多组不同的参数用batch标签来组织
<pg:batch>
<pg:sqlparam name="object_id" value="<%=object_id %>" type="int" />
<pg:sqlparam name="created" value="<%=created %>" type="timestamp" />
</pg:batch>
</pg:statement>
<pg:statement sql="<%=sql %>" pretoken="#\\[" endtoken="\\]">
<pg:batch>
<pg:sqlparam name="object_id" value="<%=object_id %>" type="int" />
<pg:sqlparam name="created" value="<%=created1 %>"
type="timestamp" />
</pg:batch>
</pg:statement>
<pg:statement sql="<%=sql %>" pretoken="#\\[" endtoken="\\]">
1.1.2.3.2 如果只有一组参数,那么不需要使用batch标签
<pg:sqlparam name="object_id" value="<%=object_id %>" type="int" />
<pg:sqlparam name="created" value="<%=created2 %>" type="timestamp" />
</pg:statement>
<pg:statement sql="<%=sql %>" pretoken="#\\[" endtoken="\\]">
<pg:batch>
<pg:sqlparam name="object_id" value="<%=object_id %>" type="int" />
<pg:sqlparam name="created" value="<%=created3 %>"
type="timestamp" />
</pg:batch>
<pg:batch>
<pg:sqlparam name="object_id" value="<%=object_id %>" type="int" />
<pg:sqlparam name="created" value="<%=created4 %>"
type="timestamp" />
</pg:batch>
</pg:statement>
</pg:batchutil>
</table>
</body>
</html>
如果要引入事务的话,可以在执行sql的标签代码的外围包一个事务即可使用的方法如下:
import com.frameworkset.orm.transaction.TransactionManager;
<%
TransactionManager tm = new TransactionManager();
try
{
tm.begin();//开始事务
%>
放置操作数据库的标签代码
<%
tm.commit();//提交事务
}
catch(Exception e)
{
try {
tm.rollback();//回滚事务
} catch (Exception e1) {
e1.printStackTrace();
}
}
%>
下一篇: Greenplum发布免费的分析数据库