数据库平台。。。

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

这是关于我的平台文字性的叙述,接下来我会简单的例子来例举平台的便捷性。
...全文
351 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)
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

81,111

社区成员

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

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