数据库访问简单实现---edainfo-model(三)——简单例子

model|访问|数据|数据库

下面就正式来讲一下开发步骤:
首先,在Tomcat5.X下建一个jdbc/edainfo的数据源,数据库可以是oracle、sql server、mysql。表的结构如下:
CREATE TABLE example (
id varchar(13) NOT NULL ,
name varchar(50) NULL ,
address varchar(50) NULL
) ON [PRIMARY]
其中,id为主键。
datasource.xml内容如下:
<?xml version="1.0" encoding="gb2312"?>
<database>
<model name="exampleModel">
<tablename>example</tablename>
<columns>
<column type="0" name="id" tabColumn="id"/>
<column type="0" name="name" tabColumn="name"/>
<column type="0" name="address" tabColumn="address"/>
<column type="2" name="pageNum" tabColumn="pageNum"/>
<column type="2" name="operation" tabColumn="operation"/>
</columns>
<relations>
</relations>
<pk tabColumn="id" />
<pages>
<page name="fore" size="20" viewPage="5"/>
</pages>
</model>
</database>
init-config.xml前面已经介绍过,这里就不详细介绍了。
将以上两个文件都放置到WEB-INF目录下。
在web.xml中,建立一个net.edainfo.filter.SetCharacterEncodingFilter的过滤器。
建立一个ExampleModel.java,如下所示:
package net.edainfo.example;
import java.util.Map;
import net.edainfo.db.DBModel;
import net.edainfo.db.ModelException;
import net.edainfo.util.format.Encode;
import net.edainfo.util.format.StringProcessor;
public class ExampleModel extends DBModel {
public ExampleModel(Map dataBase) throws ModelException {
super("exampleModel" ,dataBase);
}
public void setId(String id) throws ModelException {
set("id" ,id);
}
public String getId() throws ModelException {
return getString("id");
}
public void setName(String name) throws ModelException {
set("name" ,name);
}
public String getName() throws ModelException {
return getString("name");
}

public void setAddress(String address) throws ModelException {
set("address" ,address);
}
public String getAddress() throws ModelException {
return getString("address");
}
}
建立一个异常类ExampleException.java:
package net.edainfo.example;
import net.edainfo.exception.BaseException;
public class ExampleException extends BaseException {
static public String createFailed = "exception.createFailed";
static public String retrieveFailed = "exception.retrieveFailed";
static public String updateFailed = "exception.updateFailed";
static public String deleteFailed = "exception.deleteFailed";
static public String[] exampleArgs = {"edainfo.example"};
}
再建立一个action,ExampleAction.java:
package net.edainfo.example;
import java.util.ArrayList;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.edainfo.db.DAO;
import net.edainfo.util.ActionBase;
import net.edainfo.util.EdaGlobals;
import net.edainfo.util.FormParameter;
import net.edainfo.util.page.PageList;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.DynaValidatorForm;
/**
* @author slf
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class ExampleAction extends ActionBase {
public ActionForward executeAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response, Map params)
throws Exception {
DynaValidatorForm theForm = (DynaValidatorForm) form;
String next = "";
conn = this.getConnection();
String operation = (String) theForm.get("operation");

DAO dao = new DAO(conn, params.get(EdaGlobals.DATABASE_TYPE_KEY)
+ "");
if (operation == null || operation.equals(""))
operation = "list";
if (operation.equals("list")) {
ExampleModel model = new ExampleModel((Map) params
.get(EdaGlobals.DATA_BASE_KEY));
String pageNum = (String) theForm.get("pageNum");
if (pageNum == null || pageNum.equals("")) {
pageNum = "1";
}
theForm.set("pageNum" ,pageNum);
int pageSize = model.getPageSize("fore");
int viewPage = model.getViewPage("fore");

PageList lists = dao.select(model, "", new ArrayList(), "", Integer
.parseInt(pageNum), pageSize, viewPage, dao.DISTINCT_OFF);
Map parms = FormParameter.setListPage (theForm ,lists ,"example" ,
request);
request.setAttribute ("parms" ,parms);
next = "list";
} else if(operation.equals("add")) {
ExampleModel model = new ExampleModel((Map) params
.get(EdaGlobals.DATA_BASE_KEY));
model = (ExampleModel)FormParameter.getParameter (model ,theForm);
model.setId(dao.generateId());
dao.create(model);
next = "add";
} else if(operation.equals("addform")) {
next = "addform";
theForm.set("operation" ,"add");
}
return mapping.findForward(next);
}
}
然后是建立jsp页面,这里有两个页面,一个是浏览页,一个是表单页;
浏览页,listExample.jsp:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%
String linkPage = (String)request.getAttribute("linkPage");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title><bean:message key="edainfo.example"/></title>
</head>
<body>
<table width="75%" border="0" align="center" cellpadding="3" cellspacing="1">
<tr>
<td colspan="2"><html:link action="example?operation=addform"><bean:message key="example.add"/></html:link></td>
</tr>
<tr>
<td width="47%"><bean:message key="example.name"/></td>
<td width="53%"><bean:message key="example.address"/></td>
</tr>
<logic:iterate name="lists" id="list">
<tr>
<td><bean:write name="list" property="name"/></td>
<td><bean:write name="list" property="address"/></td>
</tr>
</logic:iterate>
<tr align="center">
<td colspan="2">
<%@ include file="/turnPage.jsp" %>
</td>
</tr>
</table>
</body>
</html>
表单页,exampleForm.jsp:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title><bean:message key="edainfo.example"/></title>
</head>
<body>
<logic:messagesPresent>
<ul>
<html:messages id="error">
<li><bean:write name="error"/></li>
</html:messages>
</ul>
</logic:messagesPresent>
<html:form action="example">
<table width="75%" border="0" align="center" cellpadding="3" cellspacing="1">
<tr>
<td width="26%"><bean:message key="example.name"/></td>
<td width="74%"><html:text property="name" size="20"/></td>
</tr>
<tr>
<td><bean:message key="example.address"/></td>
<td><html:text property="address" size="20"/></td>
</tr>
<tr align="center">
<td colspan="2"><html:submit property="submit" styleClass="buttonface">
<bean:message key="button.save"/>
</html:submit></td>
</tr>
</table>
<html:hidden property="operation"/>
</html:form>
</body>
</html>
以上两个页面放到页面根目录下,请记得将请记得将turnPage.jsp也拷贝过来。
然后,我们在struts-config.xml中配置我们的action:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<!-- ========== Form Bean Definitions =================================== -->
<form-beans>
<form-bean name="exampleForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="name" type="java.lang.String"/>
<form-property name="address" type="java.lang.String"/>
<form-property name="operation" type="java.lang.String"/>
<form-property name="pageNum" type="java.lang.String"/>
</form-bean>
</form-beans>
<!-- global exception definitions -->
<global-exceptions>
<exception handler="net.edainfo.exception.BaseExceptionHandler"
key="exception.unawareError"
path="/error.jsp"
scope="request"
type="java.lang.Exception"/>
</global-exceptions>
<!-- ========== Global Forward Definitions ============================== -->
<global-forwards type="org.apache.struts.action.ActionForward">
</global-forwards>
<!-- ========== Action Mapping Definitions ============================== -->
<action-mappings>
<action path="/example"
type="net.edainfo.example.ExampleAction"
name="exampleForm"
validate="false"
scope="request">
<forward name="list" path="/listExample.jsp"/>
<forward name="add" path="/example.do" redirect="true"/>
<forward name="addform" path="/exampleForm.jsp"/>
</action>
</action-mappings>
<!-- ========== Message Resources Definitions =========================== -->
<message-resources
null="false"
parameter="ApplicationResources"/>
<!-- ========== Plug Ins Configuration ================================== -->

<!--
Add multiple validator resource files by setting the pathnames property
with a comma delimitted list of resource files to load.
-->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>

</struts-config>
在WEB-INF/lib下记得要放如下包:struts1.1及它的相关包、jfreechart及其相关包、edabase-model.jar、log4j-1.2.8.jar、jdom.jar、xercesImpl.jar、xmlParserAPIs.jar。
现在已经完成,启动tomcat,在浏览器中敲如http://xxxxx/example.do,就可以看到效果了。
在这里,主要演示了edainfo-model的数据库操作、分页及actionform中批量的获取数据,如果你已经对它发生兴趣了,请继续关注本站的相关文章,还有更多精彩的内容等着你。
下面是这个例子的完整源码下载:
edainfo-model简单例子下载

时间: 2024-10-29 19:24:37

数据库访问简单实现---edainfo-model(三)——简单例子的相关文章

使用delphi 开发多层应用(七)简单的kbmMW多层数据库访问服务

      刚写完几个多层的例子,本来准备再写点其他稍微复杂的例子,很多同学就问数据库访问的方法,既然这样,就先写一下 数据库访问的过程与方法.kbmMW 支持很多数据库访问方式和控件,前面在安装时已经说过了.由于delphi 已经在d7 以后 不再推荐使用其传统的数据库方式BDE了,尤其是在delphi XE2 由于支持win64, 已经不支持使用BDE 了,为了演示方便,本文 后台数据库选择使用完全免费的firebird.firebird 是一个非常短小精悍的关系数据库,支持存储过程.触发器

Android AOP 注解详解及简单使用实例(三)

Android  注解 相关文章: Android AOP注解Annotation详解(一) Android AOP之注解处理解释器详解(二) Android AOP 注解详解及简单使用实例(三) 一.简介 在Android 里面 注解主要用来干这么几件事: 和编译器一起给你一些提示警告信息. 配合一些ide 可以更加方便快捷 安全有效的编写Java代码.谷歌出的support-annotations这个库 就是主要干这个的. 和反射一起 提供一些类似于spring 可配置的功能,方便简洁. 二

动态改变EnterpriseLibary数据库访问链接字符串的三种方法

使用EnterpriseLibary做数据库访问底层是我一贯的做法,除了其能兼容多种数据库,且使用其进行数据库访问,对各种数据库操作均是透明的,基本不需要对特定的数据库进行操作,编写一次操作代码,基本在各种数据库都适用.对于一些特殊的数据库,很多同行已经编写出各种各样的扩展类库,直接适用即可. 言归正传,动态改变EnterpriseLibary数据库访问链接字符串一般在使用Access数据库.Sqlite数据库等文件式的数据库比较常见,因为我们不知道客户会把程序拷贝到哪里进行使用(即使是做了安装

常用的数据库访问方式

访问|数据|数据库 ASP访问数据库的方式有哪些? 在ASP中可以通过三种方式访问数据库:1.IDC(Internet Database Connector)方式:2.ADO(ActiveX Data Objects)方式:3.RDS(Remote Data Service)方式.这三种访问方式对数据库的访问都是由Internet Information Server完成的.通过Web浏览器用HTTP协议向IIS(Internet信息服务器)发送请求,IIS执行对数据库的访问,并返回一个HTML

Java 实现连接sql server 2000(JDBC数据库访问例子)

server|访问|数据|数据库 刘金龙 04041222 ljlsunny@vip.sina.com   第一种:通过ODBC连接数据库 JAVA语言的跨平台的工作能力(Write Once ,Run Anywhere).优秀的图像处理能力(我相信现在没有那种语言可以超过JAVA在网络上的图形处理能力).网络通信功能.通过JDBC数据库访问技术等等,让我们谁都不可否认JAVA语言是SUN公司对于计算机界的一个巨大的贡献.笔者可以描述这样一个场景:有一天你上网完全可以不用IE 或者NETSCAP

用存储过程实现ASP对数据库访问

存储过程|访问|数据|数据库 一.ADO概述 ActiveX 数据对象 (ADO) 是一种既易于使用又可扩充的技术,用来将数据库访问添加到您的 Web 页可以使用 ADO 编写简洁和可升级的脚本以连接到与 OLE DB 兼容的数据源,如数据库.电子表格.顺序数据文件或电子邮件目录.OLE DB 是一个系统级的编程接口,它提供一套标准的 COM 接口,用来展示数据库管理系统的功能.使用 ADO 的对象模型,您可以轻松地(使用 VBScript 或 JScript 等脚本语言)访问这些接口并将数据库

ADO数据库访问的最优方法

ado|访问|数据|数据库 几乎所有关于ADO数据库访问性能分析的文章,都认为二进制组件的性能总是超过解释执行的ASP代码.事实上,这是错误的.从本文的测试结果可以看出,有些时候ASP代码的性能远远超过了组件. 一.引言 "地球是平坦的...": "太阳绕着地球转...": "总是通过组件访问数据库...", 上面三个命题有两个共同的特点:首先,它们都曾经被认为是正确的:其次,这三个命题实际上都是错误的. 我们都已经读到过无数的文章建议在Inte

使用设计模式构建通用数据库访问类

访问|设计|数据|数据库 使用设计模式构建通用数据库访问类 在应用程序的设计中,数据库的访问是非常重要的,我们通常需要将对数据库的访问集中起来,以保证良好的封装性和可维护性.在.Net中,数据库的访问,对于微软自家的SqlServer和其他数据库(支持OleDb),采用不同的访问方法,这些类分别分布于System.Data.SqlClient和System.Data.OleDb名称空间中.微软后来又推出了专门用于访问Oracle数据库的类库.我们希望在编写应用系统的时候,不因这么多类的不同而受到

《解剖PetShop》系列之二:PetShop数据访问层之数据库访问设计

在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的概念.从本部分开始,我将依次对各层进行代码级的分析,以求获得更加细致而深入的理解.在PetShop 4.0中,由于引入了ASP.Net 2.0的一些新特色,所以数据层的内容也更加的广泛和复杂,包括:数据库访问.Messaging.MemberShip.Profile四部分.在系列二中,我将介绍有关数据库访问的设计. 在PetShop中,系统需要处理的数据库对象分为两类:一是数据实体,对应数据库中相应的数据表.它们没有行为,仅用于

数据库同步-请教问题:异地数据库访问问题

问题描述 请教问题:异地数据库访问问题 请教问题,某省各区县都部署有自己的系统,系统是BS的,应用服务器与数据库服务器是分开的,而且只有web应用服务器是对外开放的.现在省里想直接连接各区县的数据库,进行业务信息的查询.有没有什么中介件或技术可以实现,省里的服务器可以访问区县的数据? 或者有什么方式可以让区县的数据实时或定时的同步汇总到省里的服务器中? 解决方案 百度............... 解决方案二: 简单点的办法就是代理,要么就是人为写代理server 解决方案三: 你数据库服务器能