欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

开源j2ee 框架bbossgroups 1.0 数据库操作标签初探

程序员文章站 2022-04-23 14:18:07
...

看看开源j2ee 框架bbossgroups 中如何使用dbutil,batchutil 标签来实现数据库的 预编译/普通insert , update , delete ,预编译/普通批处理操作 ,比较简单也比较实用。

文章分三部分介绍:

  1. 预编译/普通insert , update , delete 操作
  2. 执行预编译/普通批处理操作标签
  3. 连接池配置

查看全文: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();
                        }
                }
                %>

 

点击查看全文:http://yin-bp.iteye.com/admin/blogs/648161