阅读更多

2顶
5踩

企业架构

看看开源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

2
5
评论 共 1 条 请登录后发表评论
1 楼 yin_bp 2010-04-20 11:18
bbossgroups项目下载地址:
https://sourceforge.net/projects/bboss/files/
相关的子项目:
bboss-taglib(标签库框架)
http://sourceforge.net/projects/bboss/files/bbossgroups-1.0/bboss-taglib.zip/download
bboss-persistent(持久层框架)
http://sourceforge.net/projects/bboss/files/bbossgroups-1.0/bboss-persistent.zip/download

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 网络抓包VB版

    网络抓包工具,网络抓包VB版

  • VB 针对目标程序抓包(开源)

    VB针对目标程序抓包,只需填入目标程序的任意句柄即可,开源...部分网络函数HOOK了 但未抓包 但基本没有什么程序使用那些函数进行发包和收包了

  • 使用VB在WIN2000下截获IP数据包

    作者:天同QQ:19632995MSN:jyu1221@hotmail.com日期:2002.04.30      为了方便广大VB爱好者也能向C语言一样能截获IP包,本人特地写了以下的源代码,以供VB开发者参考。       以下是在VB中截获WIN2000下TCP/IP包的源代码,在VB6.0,win2000下测试通过,需要注意的地方是,1.必须和本地的一块网卡,2.每次获取数据后必须

  • 网络基础——IP数据报头部信息分析

    IP数据报头部信息分析 IP数据报由首部和数据两部分组成,首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的,为0—40字节。所以,头部总长度为20—60字节。首部中的源地址和目的地址都是IP协议地址。 IP数据报的格式如下所示:(图片来源于网络) 抓取的IP头部数据包内容如下: 1. 版本:占4bit,指IP协议...

  • 2.1.3发送数据和接收数据

    发送数据和接收数据的两种方法发送数据可以用Socket类的Send方法和NetworkStream类的Write方法接收数据可以用Socket类的Receive方法和NetworkStream类的Read方法 Socket类的Send方法的原型有如下        public  int  Send( byte[]   buffer )        public  int

  • 吐血巨献:VB网络编程(webbrowser+Inet+抓包封包+经验)

    声明:本文部分内容来源与网络! 网络的重要性不用我说,所以关于网络的编程对我我们来说也是非常重要,非常实用的! 但是我在网络上却没有看到多少关于VB网络编程方面的知识,一方面是VB用的人比较少,不会用就说VB不好(个人认为学好VB以后C++、Java一看就会!);另一方面是大家不愿意公开这方面的知识,自己辛辛苦苦探索的,还得靠它吃饭,怎么可能轻易拿出来公布?但是社会要发展,人类要进步,为...

  • packetvb vb网络抓包

    packetvb,vb类,封装了 winpcapa, vbpcap又称为PacketVB,是一种能够被VB调用的数据包捕获开发库,vbpcap封装了WinPcap的API函数的ActiveX库,由Politecnico di Torino开发,使用方法与WinPcap下的Packet.dll关系密切。因此在使用vbpcap编程的时候,应该首先安装WinPcap vbpcap把捕获到的网络数据包存放在内部的一个缓冲器中,解析每个数据包。当每捕获一个数据包时,会触发一个事件,通过该事件,传递被捕获数据包的字节数。然后可以调用vbpcap提供的方法,把捕获到的数据包从内部缓冲器中copy到一个2进制数组中。 目前的vbpcap只能做到捕获数据包,没有对捕获到的数据包进行协议分析,协议分析的工作可以由程序设计者来完成。另外,由于vbpcap是封装的WinPcap的API函数,因此和WinPcap一样,只能捕获数据包,并不能阻止数据包在网络上的传递,因此不能用来开发防火墙一类的程序。 在使用vbpcap编写捕获数据包程序之前,应先最好准备工作,可以参考如下步骤来进行: 1.首先安装2.3-WinPcap版本(废话~~~),注意,一定要安装该版本的winpcap,否则注册vbpcap.dll时会出错(还不知道原因)。 2.解压缩packetvb-1.0.0.3.bin.zip,把其中的vbpcap.dll拷贝到c:\windows\system32目录下 3.“开始”--&gt;“运行”,输入“regsvr32 c:\windows\system32\vbpcap.dll”,注册vbpcap.dll 4.打开VB,“工程”--&gt;“引用”--&gt;“浏览”,在c:\windows\system32中选中vbpcap.dll,确定 5.下面就可以使用vbpcap.dll来编写网络抓包程序了

  • vb调用vc写的dll截获修改封包源代码

    参照防火墙源代码,自己写的vb调用vc写的dll截获和修改封包,用于xp,2000系统。包括vb源代码,vc dll源代码绝对超值。有兴趣讨论封包的同志们可以加我。qq:23131683

Global site tag (gtag.js) - Google Analytics