# 基于rmi的数据库中间件设计 **Repository Path**: markchen7788/rmi ## Basic Information - **Project Name**: 基于rmi的数据库中间件设计 - **Description**: 分布式对象技术课程实践:基于rmi的数据库中间件设计 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2020-12-07 - **Last Updated**: 2024-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于rmi的数据库中间件设计 #### 介绍 分布式对象技术课程实践:基于rmi的数据库中间件设计,并利用中间件建立一个数据库应用(Java web项目)。 #### 软件架构 1. 前端:React 2. 后端:Springboot 3. 数据库中间件:Java Rmi服务 #### 安装教程 1. 主机安装Node.js,并在控制台进入front-end-pages目录下,按顺序执行以下命令运行前端: > npm install
npm start 2. 后端安装eclipse、Springboot插件,运行即可; 3. 运行中间件前需要配置 * jdk 1.8 * Mysql(5.6)、Sql Server(2017 express)(其余关系型数据库也行) * 导入各家数据库的JDBC工具包 * 绑定Rmi服务端口和主机(如果Rmi服务放在远程主机需要注意避开防火墙,并绑定主机,更有甚者需要指定另外一个通信端口) #### 项目需求分析 1. 数据库操作中间件: * 提供数据库连接接口。该接口可使“数据库操作中间件”连接当前主流的数据库,如Oracle、SQLServer、MySQL、Access等;参数要求:指示数据库类型,数据库相应的连接参数。 * 提供关闭数据库连接接口。该接口可关闭“数据库操作中间件”当前的数据库连接。 * 提供数据库查询语句接口。该接口传入组装好的字符串型的SQL查询语句,返回参数为列表,该列表代表查询的结果。 * 提供数据库操纵语句接口。该接口传入参数为哈希表,哈希表中记录了查询的表名、字段名、操纵语句类型标志、“where”语句的条件等;传出参数为成功和失败的布尔值。针对哈希表中的这些信息,服务端需要做到: * 多类型(insert、update、delete)操纵语句的自动拼装,必要时需要拼接“where”语句的条件; * 根据表名自动获取数据类型,从而在拼装SQL语句时决定数值是否加单引号; * 提供事务确认和回滚处理。 * 接口设计如下表所示:
![Image text](./doc/2.JPG) * 哈希表参数传递示意表如下表所示:
![Image text](./doc/1.JPG) 2. Web应用: 利用Web技术构建一个学生、教师消费记录管理系统,通过系统可以: * 学生、教师信息的查询、增加、删除(可批量)、修改。 * 学生、教师的消费记录的查询。 #### 参与贡献 1. 数据库中间件设计 * 本次项目主要是我和实践组长一起完成,我负责编写中间件,他负责写应用,我们交流的很频繁,组长说这就是敏捷开发中的“结对编程”,幡然醒悟,哈哈哈哈哈哈,果然软工的课都是白学了。 * 我将编写好的Rmi服务半成品挂在服务器上,他就可以直接利用已经编写好的接口进行应用的编写,而我可以在本地继续完善Rmi服务,我们两个的工作可以说互不干扰,所有合作“肥肠”愉快! 2. 中间件客户端在Springboot后端的部署 3. 项目存在的已知缺陷: * 在使用sql server时,“根据表名自动获取数据类型,从而在拼装SQL语句时决定数值是否加单引号”这一功能存在bug,在装配哈希表中字段时还是需要为非数值类型数据加上单引号。bug原因出在获取数据库表字段信息时未指定表所在的scheme(模式),mysql无需指定,但是sqlserver、oracle需要指定。 * rmi服务调用只支持单用户连接调用,且并没有设置同步,所以不可以多用户同时连接该服务; * 调用Rmi服务连接数据库后一定要记住调用接口方法关闭连接,不然服务会长时间消耗资源来保持与数据库的连接。如果不需要使用rollback、commit等事务操作,建议修改Rmi服务源码直接让服务端在执行完sql语句后自主关闭连接。 #### 更多详情参看本人[实践文档](./doc/实践文档.pdf)