数据库平台。。。

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文件。

这是关于我的平台文字性的叙述,接下来我会简单的例子来例举平台的便捷性。
...全文
314 23 打赏 收藏 转发到动态 举报
写回复
用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)

81,091

社区成员

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

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