数据库平台。。。

cyicecream 2004-12-19 07:36:06
本人做JAVA的时间并不是很长,但是我喜欢对自己做过的项目进行总结。以下是
我从项目中领悟到的一小部分,并且动手实现了这个平台。
1. 为什么需要数据库平台
在所有的项目开发中,与数据库的数据取存是不可缺少的,但是由于数据库的存取在代码的编写上花费大量的时间和人力资源,对于数据库有限的资源也需要编码人员有一定的技术要求,并且由于个人编写代码格式的不统一,代码一般是一次性使用,最多只是代码之间的COPY,资源没有得到更好的利用,开发效率差,给维护与再次开发带来很大程度上的难度,移植性较差。因此需要一个对数据库专门进行管理的平台。该平台应具备统一代码编写方式,采用模式取存数据,操作便捷,不需要了解第三方知识就可以使用,可移植,可维护性强,开发效率高等特点。
2.1
平台采用配置方式,对于数据库的driver,url,user,password采用读取XML文件来获得,并由工厂进行管理数据库的资源操作和利用。程序员更改数据库连接只需要直接修改外部文件就可以达到目的,不需要改动代码。具有极大的灵活性。
2.2 创建数据库
取得连接所需要的数据后,工厂负责连接并管理con,对外部提供尽可能少的接口,主要是方便管理如Connection,ResultSet,Statement的管理。在一个进程里使用同一个Connection。避免编码时发生的资源未关闭导致系统瘫痪等问题。
2.3 操作:添加,删除,操作
平台定义自己固定的操作方式,程序员基本不需要掌握数据库知识就可以使用,取而代之的是只需要了解基本的JAVA容器,数组,STRING等的知识。接口传入参数,采取多种方式取回数据。满足各种层次的数据需求(如:类似rs.getString(fieldname)的数据取值,也有直接以2维数组形式返回的数据)。平台从接口得到的参数和解析XML配置文件得到的数据进行动态组合成SQL并执行。简化了操作,让程序员有更多的精力关心商业逻辑。加速开发效率,为企业节约开发成本。
3. 数据库平台支撑工具
平台主要采用XML文件进行数据的存取,直接对XML文件操作容易造成错误而导致平台运行出错。为了避免这种情况的发生需要有一个工具来支撑平台,对不熟悉XML的代码人员也可以容易的使用平台。加大平台的可用性。工具还应具备代码生成能力,直接根据数据库信息自动生成XML文件。

这是关于我的平台文字性的叙述,接下来我会简单的例子来例举平台的便捷性。
...全文
316 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
diya 2004-12-22
  • 打赏
  • 举报
回复
非常好,学习中。。。
tom2005 2004-12-22
  • 打赏
  • 举报
回复
不错
lsqlister001 2004-12-22
  • 打赏
  • 举报
回复
有意思
sxmliu 2004-12-22
  • 打赏
  • 举报
回复
帮你顶~~~~~~
haitangli3 2004-12-22
  • 打赏
  • 举报
回复
都来帮顶,希望你快点写好,我也想看看
haitangli2 2004-12-22
  • 打赏
  • 举报
回复
好的帖子一定要,顶上去,看帖子都顶啊,让大家都看到!!
sxmliu2 2004-12-22
  • 打赏
  • 举报
回复
非常值得学习,楼主的确已经有很强的设计分析经验了!
100geOK 2004-12-21
  • 打赏
  • 举报
回复
基本的功能以例举完,还有一个配套的工具,进行表数据XML生成。
优点是便于管理,一次开发,处处都可使用。再次修改只需专注于
平台的修改,而不改动其他代码。
100geOK 2004-12-21
  • 打赏
  • 举报
回复

/**
* 带有条件的查询方式,这是返回LIST方式的查询,使用类似ResultSet的rs.getString(name);
*SELECT SKUID,SKUNAME,SKUDATE FROM SKU WHERE 1=1 AND skuname='可乐' AND
*skuid='11' AND skuid > 1
* @throws Exception
*/
void testListData() throws Exception {
DataManage dm = new DataManage();
dm.activity("sku");
Properties prop = new Properties();
prop.put("skuname", "可乐");
prop.put("skuid", "11");
String condition = "skuid > 1";
dm.getListData(prop, condition);
System.out.print("/***************************/\n");
while (dm.nextData()) {
System.out.print(dm.getParam("skuid") + " ");
System.out.println(dm.getParam("skuname") + " ");
}

dm.closeConnection();

}

/**
* 测试分页查询结果,0表示第一页的数据,每个表可自行定义自己的分页数,
* 在XML文件里进行配置
* 执行的SQL语句:
* SELECT SKUID,SKUNAME,SKUDATE FROM SKU WHERE 1=1
* @throws Exception
*/
void testpage() throws Exception {
DataManage dm = new DataManage();
dm.activity("sku");
Object[][] data = dm.getArrayData(0);
if (data.length > 0) {
for (int i = 0; i < data.length; i++) {
System.out.print("\n第" + (i + 1) + "行的数据:");
for (int j = 0; j < data[0].length; j++) {
if (data[i][j] != null) {
System.out.print(" " + data[i][j].toString());
}
}
}
}
else {
System.out.print("没有数据!");
}

System.out.println("\n总共" + dm.COUNT_RECORDS + "条记录");
dm.closeConnection();

}
cyicecream 2004-12-21
  • 打赏
  • 举报
回复
//测试插入,分为批量插入和单记录插入两种,这里是批量
//INSERT INTO SKU (skuname,skuid) VALUES ('汽水','14')
//INSERT INTO SKU (skuname,skuid) VALUES ('可乐','13')
//测试插入两条记录
void testInsert() throws Exception {
DataManage dm = new DataManage();
String table = "sku";
Properties prop = new Properties();
prop.put("skuid", "14");
prop.put("skuname", "汽水");

dm.addBatchInsert(table, prop);
prop.put("skuid", "13");
prop.put("skuname", "可乐");
dm.addBatchInsert(table, prop);
dm.commit();
dm.closeConnection();
}
//测试更新,分成批量更新与单记录更新,这里为批量更新
//UPDATE sku SET skuname='火柴' WHERE 1=1 and skuid='13'
//UPDATE goods SET goodsname='测试' WHERE 1=1 and goodsid=1

void testUpdate() throws Exception {
DataManage dm = new DataManage();
String table = "sku";
Properties prop = new Properties();
prop.put("skuname", "火柴");
String specialcondition = "skuid='13'";

dm.addBatchUpdate(table, prop, specialcondition);
table = "goods";
prop = new Properties();
prop.put("goodsname", "测试");

specialcondition = "goodsid=1";
dm.addBatchUpdate(table, prop, specialcondition);
dm.commit();
dm.closeConnection();

}
cyicecream 2004-12-21
  • 打赏
  • 举报
回复
//删除操作,执行的DELETE语句:DELETE FROM sku WHERE skuid='11' or skuid='10'
void testDelect() throws Exception {
DataManage dm = new DataManage();

String table = "sku";
String sql = "skuid='11' or skuid='10'";
dm.excuteDelect(table, sql);
dm.closeConnection();
}
这个操作简单,接口也简单。
sky_boy001 2004-12-21
  • 打赏
  • 举报
回复
劳驾小舟,能不能把其他代码贴出来?
cyicecream 2004-12-21
  • 打赏
  • 举报
回复
//测试插入,当时我在做一个WEB测试需要数据,所以就利用它自动创建1000条数据
//一般应用情况下是非常简单的
void testInsert() throws Exception {
String table = "goods";
TableDesc td = RepositoryFactory.newInstance().findTableDesc(table);
List fd = td.getFieldDescs();
genData(table, fd);
}

void genData(String table, List fd) throws Exception {
DataManage dm = ConnectionFactory.retFactory().recDataManage();
dm.activity(table);
Statement stmt = null;
dm.getListData();
Properties prop = new Properties();
Properties pk = TableInfo.getPrimaryKeys(table);
Iterator it = pk.keySet().iterator();
String pkname = null;
while (it.hasNext()) {
pkname = it.next().toString();
}
dm.nextData();
int index = 1000;
while (index++ < 1001) {
for (int i = 0; i < fd.size(); i++) {
String fieldname = ( (FieldDesc) fd.get(i)).getFieldName();
if (!fieldname.equals(pkname)) {
prop.put(fieldname, dm.getParam(fieldname));
}
else {
String pkvalue = dm.getParam(fieldname);
prop.put(fieldname, new Long(new Long(pkvalue).longValue() + index));
}
}

dm.addBatchInsert(table, prop);
}
dm.commit();
dm.closeConnection();
}
alabaza 2004-12-21
  • 打赏
  • 举报
回复
离开前最后一次顶
alabaza 2004-12-21
  • 打赏
  • 举报
回复
再UP
alabaza 2004-12-21
  • 打赏
  • 举报
回复
代码比较多 俺看过 不错 UP
cyicecream 2004-12-20
  • 打赏
  • 举报
回复
UP
cyicecream 2004-12-19
  • 打赏
  • 举报
回复
平台还有另一个XML,是记录着使用表的字段信息,这些信息是一次性放到内存里的。
这只是平台的一小部分功能,插入时,提供的接口很简单,只需要给出字段名和值。
就可以进行插入。
sky_boy001 2004-12-19
  • 打赏
  • 举报
回复
具体怎么实现数据的查询,插入?
sky_boy001 2004-12-19
  • 打赏
  • 举报
回复
是不是还应该解析XML?
加载更多回复(3)
BDB是跨数据库平台数据库设计和自动安装工具、支持Oracle、MS SQLServer、Access、MySQL、SQLAnyWhere、Sybase数据库。通过BDB可以快速建立数据库模型、并随时与实体数据库进行双向同步。同时它还可以为您的应用程序创建数据库自动安装(或自动升级)程序、以及实现不同数据库平台数据库迁移等。此外、在BDB中提供了对开发语言的支持、其数据库结构定义文件采用XML标准格式、并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、您可以通过使用BDB来简化软件开发和部署过程:1、数据库设计、自动安装:支持和数据库之间的正向和反向工程。既可以通过BDB进行新的数据库设计,自动创建或更新至实体数据库、也可导出现有数据库结构,并为其创建数据库自动安装程序。2、跨数据库平台:只需按熟悉的数据库平台进行一次定义,就可在上述各个数据库平台中进行数据库自动安装和任意迁移。系统会自动进行语法、数据类型转换。3、数据库迁移:在不同数据库平台间进行数据库结构(包括数据表、索引、约束、视图和存储过程对象)和数据迁移。4、查询分析、数据表查询、数据编辑功能。提供专用的SQL编辑器、支持SQL语法高亮、快速脚本输入、脚本预定义等。5、预输出创建、更新SQL脚本。6、提供数据导入、导出功能。支持从Excel导入导出的双向编辑操作。7、对开发语言的支持。开放的数据库物理结构文件格式、并提供外部调用源程序,包含C#、Delphi、JAVA三个版本。8、数据库物理结构定义和实体数据库之间的比对更新、同步。9、可为可重用属性创建数据字典定义、并进行同步。10、采用方案定义、支持多个工程模式。11、提供自定义功能、可以根据需要扩展数据库结构定义文件。12、支持多语言(目前版本语言:中/英文)。并提供了新的语言定义的说明、可根据需要增加新的语言支持。website: www.bainsoft.com

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧