基于RMI技术的数据库操作中间件设计 综合实践报告

news2024/9/20 14:45:31

前言

1.1  实践目的和要求

为了将理论用于实践,巩固所学知识,提高自己发现问题并用所学知识分析问题和解决问题的能力,锻炼自己的工作能力,适应社会能力,自我管理能力,了解目前软件的应用情况,需求情况,发展方向及前景。

要求:

要求在实习过程中认真学习技术知识,能够理解当天的内容。对技术的理论知识要及时实践,认真完成项目要求的内容,探讨项目的解决方案以及进展。

 

 

二、实践内容

2.1  实践过程

过程主要分为以下三个阶段:

第一周:查阅资料,完成项目需求,撰写需求分析报告。

第二周:进行系统总体设计,划分功能模块,选择技术方案,撰写系统概要说明书。

第三周:进行系统详细设计和实现,并撰写详细设计说明书。

第四周:整合各功能模块,进行联调,并根据系统设计指标进行测试,完成整个系统开发,提交设计报告文档,进行成果展示和答辩。

 

2.2  实践内容

为数据库应用(如JSP,即RMI客户端),提供一个“数据库操作中间件”(RMI服务)。该中间件通过接口为应用提供增加记录、修改记录、删除记录和查询操作。Web应用(JSP)中增、改、删操作不用再书写SQL语句,而只专注于页面风格和操作逻辑,从而即使一个没学过数据库操作的程序员经过简单培训也能设计出操作数据库的应用;此外所有针对数据的操作都封装在RMI服务端,出现问题容易厘清问题原因。

 

 

4 软硬件平台

软件与硬件

最低配置

推荐配置

管理员端运行环境

网络浏览器(IE6及以上)

最新版火狐浏览器

服务器操作系统

Win7

Win10

服务器JDK

JDK1.7

最新JDK

服务器CPU

双核3.2GHz及以上

四核3.2GHz及以上

服务器网络

以太网3Mbps及以上

以太网10Mbps及以上

客户端CPU

双核1.6GHz及以上

双核3.2GHz及以上

 

 

2.3  主要成果

1.1.2各个阶段的时间进度大致安排

第一阶段:进行需求的分析和数据库的设计,完成了需求说明文档,并对项目的工作量进行了评估,确定了小组分工以及时间进度表。

第二阶段:完成了数据库的编写和约束的创建,完成了概要设计文档,每个人的分工进行了进一步的细化,同时统一了代码编写环境。

第三阶段:编写并整合详细设计文档,开始具体功能的编写。

第四阶段:配合小组对项目进行了整合。

1.2各阶段工作任务分解

阶段名称

任务名称

任务描述

  

第一阶段

需求分析

任务分配

1 完成需求分析文档

2 为队员分配任务

3 设计任务进度表

  

第二阶段

统一开发环境

统一数据库

前端编写

1 完成数据库的编写和约束的创建

2 完成前端界面

  

第三阶段

编写代码

1 完成项目具体功能的实现

2 整合项目

  

第四阶段

整合项目

1 测试项目

2 整理文档

3 PPT制作

  

2需求分析

2.1概述

为数据库应用(如JSP,即RMI客户端),提供一个“数据库操作中间件”(RMI服务)。该中间件通过接口为应用提供增加记录、修改记录、删除记录和查询操作。Web应用(JSP)中增、改、删操作不用再书写SQL语句,而只专注于页面风格和操作逻辑,从而即使一个没学过数据库操作的程序员经过简单培训也能设计出操作数据库的应用;此外所有针对数据的操作都封装在RMI服务端,出现问题容易厘清问题原因。

2.2数据库操作中间件主要功能

基本功能1:RMI服务端数据库连接接口。该接口可使“数据库操作中间件”连接当前主流的数据库,如Oracle、SQLServer、MySQL、Access等;参数要求:指示数据库类型,数据库相应的连接参数。 设计接口并实现该接口。

基本功能2:RMI服务端数据库查询语句接口。该接口传入组装好的字符串型的SQL查询语句,返回参数为字符串数组,该数组代表查询的结果。

基本功能3:RMI服务端数据库操纵语句接口。该接口传入参数为哈希表,哈希表中记录了查询的表名、字段名、操纵语句类型标志等;传出参数为成功和失败的布尔值。针对哈希表中的这些信息

  1. 多类型(insert、update、delete)操纵语句的自动拼装;
  2. 根据表名自动获取数据类型,从而在拼装SQL语句时决定数值是否加单引号;
  3. 提供事务确认和回滚处理;
  4. 操纵语句需要可带上where条件。
  5. 评价:进行主表(如学生信息表)、从表(学生消费流水表)的操作。

功能4:基于功能2,每个查询Web页面都对应一个JSP页面,这个JSP页面充当RMI客户端,获得查询记录;将页面浏览操作封装在中间件中,从而实现对单表记录分页面的浏览操作;在浏览页面的同时可选择记录进行删除或切换到修改页面,可切换到增加记录页面。

功能5:所有对记录增加、修改和删除的的Web页面都提交给一个“统一JSP”进行集中处理,这个JSP将充当RMI客户端角色,

2.3主要约束

1.需要提供相应的JSP应用来验证中间件效果增加、修改、删除、查询操作效果。

2.数据库类型支持当今主要流行的数据库。

 

3设计与实现

3.1概述

第一步定义远程接口和远程接口方法:ConnInterface.java

第二步实现远程接口和远程接口方法:Conn.java

第三步启动RMI注册服务并进行对象注册:ConnServer.java

第四步查找远程对象并调用远程方法:ConnClient.java

第五步在需要使用远程方法的*.jsp文件中用usebean动作实现ConnClient类对象,使用远程方法。

3.2设计要点

1.需要提供一个典型的“B/S(浏览器服务器)+RMI”设计架构。

2.需要制定相应的统一规则,规定Web页面中的字段命名,能识别主关键字、表名称以及执行动作,从而在进行数据表增、改、删操作提交给统一JSP时,具有完整的语义含义。

3. 统一JSP提供哈希表结构收集提交的字段名称和值对、表名对、增删改动作对。

4.JSP中的RMI客户端可以以类的形式或bean的形式来充当。

5.以给定的RMI的DEMO为例,扩展出相应的数据库操纵中间件。

3.3 主要程序文件

定义远程接口和远程接口方法:

ConnInterface.java

public interface ConnInterface extends Remote{

    public Connection getMySQLConnect(String root,String pass) throws RemoteException;

    public  ResultSet executeQuery(String sql) throws RemoteException;

    public void executeUpdate(String sql) throws RemoteException;

}

实现远程接口和远程接口方法

Conn.java

以实现连接数据库为例

public Connection getMySQLConnect(String root,String pass) throws RemoteException

       {

              //连接MySQL数据库的方法

              Connection con=null;

              String driverName="com.mysql.cj.jdbc.Driver";

              String userName=root;

              String userPasswd=pass;

              String conURL="jdbc:mysql://localhost:3306/dbstudent?serverTimezone=GMT%2B8";

              try

              {

                     Class.forName(driverName);

                     System.out.println("Success loading MySQL Driver!");

              }

              catch(ClassNotFoundException e)

              {

                     System.out.println("Error loading MySQL Driver!");

              }



              try

              {

                     //连接数据库

       con=DriverManager.getConnection(conURL,userName,userPasswd);

                     System.out.println("Success linking MySQL Driver!");

              }

              catch(SQLException e)

              {

                     System.err.println(e.getMessage());

              }

              return con;

       }

启动RMI注册服务并进行对象注册

ConnServer.java

以连接数据库方法为例

LocateRegistry.createRegistry(1099);

ConnInterface Conn = new Conn();

Naming.rebind("conn",Conn);

查找远程对象并调用远程方法

ConnClient.java

以实现连接数据库方法为例

public Connection Conn(String root,String pass){

              Connection con=null;

              try{

                     ConnInterface conn=(ConnInterface)Naming.lookup("conn");

                    

                     //调用远程方法

                    

                     con=conn.getMySQLConnect(root,pass);

                    

              }

              catch(Exception e)

              {

                     System.out.println("ConnClient exception: " + e); 

              }

              return con;

       }

在需要使用远程方法的*.jsp文件中用usebean动作实现ConnClient类对象,使用远程方法。

MySQL.jsp

以实现连接数据库为例

<jsp:useBean id="Conn" scope="page" class="conn.ConnClient"/>

<%

String user=request.getParameter("username");

String pass=request.getParameter("password");

Conn.Conn(user,pass);

out.print("MySQL数据库连接成功!");

%>

 

4.1.1数据库连接功能

(1)

6df0d6b1b27442fbb12f66f5d361d481.png

(2) 

 

26d73c7592e64eb88060f287971f28b9.png

(3)

9127e98f43184d009e827f7c00cbd6da.png

4.1.2案例展示

50d587950b824b4ca3c8d11eb7094e2b.png

4.1.3 增加

 

72b4d8ba531e426084788a8c93bd6ff2.png

4.1.4编辑

(1)

68c51f5f4de64ee494221f2062feda6c.png

(2)

e7ec827aaee84beda486af01bec0ea94.png

a499a71227f54501b243f42265f138f0.png

4.1.6查找

(1)

a239385661064874b7491b893afb4354.png

 

(2)

 

 

a6b4002aacb24ccd914d4cde572a9c7d.png

4.1.6数据库操纵语句

d4f165082e5a4c7aaf395b4624d13e49.png

 

 

三、总结

3.1  个人心得

完成了自己的任务,熟悉了RMI相关技术的使用,从一个项目的初期开始完成一个项目,体验了项目开发的整个流程。需求分析在一个项目中是非常重要的,后期的所有工作都在围绕着需求分析来做。后期编写类的函数和成员,要根据前期编写的项目概要设计和详细设计来编写。期间出现了许多编程方面的细节问题。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[疑难杂症2023-002]不就是Move一个文件吗,怎么会有这么多坑呢?

本文由Markdown语法编辑器编辑完成&#xff0e; 1. 前言: 近期在项目中遇到一个需求&#xff0e; 背景是&#xff0c;在一个QT封装的C/S架构的软件中&#xff0c;一个报告的预览页面&#xff0c;是由QT封装了QWebWidget, 里面放着一个网页&#xff0e;这个网页通过调用一定的…

论文解读 TOOD: Task-aligned One-stage Object Detection

github: https://github.com/fcjian/TOOD paper: https://arxiv.org/pdf/2108.07755.pdf 关键点 思考起点 指出传统one-stage算法在在优化目标分类和定位问题中的不足&#xff08;DecoupledHead分离了分类任务和回归任务[yolox表示解耦这是优点&#xff0c;yolo1-5都是使用y…

[oeasy]python0054_三引号_原样显示字符串_triple_quoted

三引号 回忆上次内容 \ 首先是转义字符 可以 和别的字符 构成转义序列 \a是 ␇ (bell),\b 退回一格\t 水平制表符\v、\f LineFeed\\ 输出 \\" 输出 "\ 输出 \xhh 通过 16 进制数值转义\nnn 通过 8 进制数值转义\ 还是 续行字符 放在 行尾可以让 下一行和本行 连成一…

Linux2

4.Linux的文件系统4.1.linux中所有的一切都是文件万事万物皆文件windows是盘符&#xff0c;linux是树windows是\&#xff08;翘&#xff09;linux是/4.2.查找文件方式&#xff1a;1. 绝对路径 有/2. 相对路径 4.3.挂载&#xff1a;执行挂载命令&#xff1a;mount 设备文件名 挂…

CentOS 安装 MinIO Server

1) 下载 MinIO 服务 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio sudo mv minio /usr/local/bin/ 2) 创建systemd服务文件 sudo vim /etc/systemd/system/minio.service [Unit] DescriptionMinIO Documentationhttps:…

C语言文件操作(2) “流”的拓展介绍

tips 1. 打开一个文件 -> 内存里面就会创建一个对应关联的文件信息区 -> 文件信息区其实就是一个FILE类型的结构体 -> 各个结构体成员记录了该文件的种种信息 -> 结构体(文件信息区)由FILE* 结构体指针来维护 -> 有了指针&#xff0c;一切都好说了 2. 使用文…

文献阅读(45)——使用自监督学习对AMD分类

使用自监督学习对AMD分类 文章目录使用自监督学习对AMD分类一、简介二、先验知识三、文章核心内容四、使用方法1. 非参数化实例歧视&#xff08;中文翻译过来总是奇奇怪怪&#xff0c;其实就是NPID&#xff09;a 挑战b 解决方案c 转化&#xff01;2. 数据集3. 数据预处理五、结…

Python之拉盖尔多项式

文章目录拉盖尔多项式简介微分与积分求根和反演采样和拟合拉盖尔多项式简介 拉盖尔多项式是拉盖尔方程的标准解&#xff0c;但其更著名的应用是薛定谔方程在解氢原子的时候&#xff0c;其径向函数最后要乘上一个Ln−l−12l1(2rnaμ)L^{2l1}_{n-l-1}(\frac{2r}{na_\mu})Ln−l−…

TCP/IP应用层常见协议总结

TCP/IP应用层常见协议总结1.HTTP:超文本传输协议2.SMTP:简单邮件传输(发送)协议3.POP3/IMAP:邮件接收的协议4.FTP:文件传输协议5.Telnet:远程登陆协议6.SSH:安全的网络传输协议1.HTTP:超文本传输协议 超文本传输协议 主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我…

浏览器的通信能力

用户代理 浏览器可以代替用户完成http请求&#xff0c;代替用户解析响应结果&#xff0c;所以我们称之为&#xff1a;用户代理 user agent 在网络层面&#xff0c;对于前端开发者&#xff0c;必须要知道浏览器拥有的两大核心能力 自动发出请求的能力自动解析响应的能力 自动…

『51单片机』串口通信配置

&#x1f6a9;write in front&#x1f6a9; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5…

技术分享 | 黑盒测试方法论—因果图

因果图法是一种利用图解法分析输入与输出的各种组合情况&#xff0c;从而设计测试用例的方法&#xff0c;它适合于检查程序输入条件的各种组合情况。 因果图法比较适合输入条件比较多的情况&#xff0c;可以测试所有的输入条件的排列组合。因果图的 “ 因 ” 就是输入条件&…

Flutter滚动悬浮效果

有以下几种效果 1、tabBar透明度随偏移0-1渐变过度 2、app上下滚动触发tabBar同步滚动 3、tabBar切换触发app上下同步滚动 1、计算每个区块的高度 用keyList保存声明的key&#xff0c;用heightList保存每个key对应的组件高度 // key列表 List<GlobalKey> keyList [Gl…

lower_bound与upper_bound的应用

<1>lower_bound (1). . 上述代码返回在升序排序的序列a中第一个大于等于 t 的元素的地址. 示例: (2) 上述代码返回在升序排序的序列a中第一个大于等于 t 的元素的下标. 示例: 例题: P2249 【深基13.例1】查找 P2249 【深基13.例1】查找 - 洛谷 | 计算机科学教育新生…

JavaSE(多态、abstract、接口)

1.多态 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同 的状态。 向上转型 向上转型&#xff1a;实际就是创建一个子类对象&#xff0c;将其当成父类对象来使用。 语法格式&…

(牛客)小杜跑酷

链接&#xff1a;https://ac.nowcoder.com/acm/contest/49244/F?&headNavacm 来源&#xff1a;牛客网 题目描述 小杜又在玩游戏了&#xff01;这回他玩的是跑酷游戏&#xff01; 已知该跑酷地图长为n&#xff0c;有3层&#xff0c;可以理解为一张3n的地图。令人新奇的是&…

Shiro学习看这一篇文章就够了

第一章 Shiro简介 第1节 shiro介绍 1官网地址: http://shiro.apache.org/Apache Shiro 是一个功能强大,易于使用的Java安全框架,他执行认证、授权、加密、会话管理等功能,使用Shiro易于理解的API,使你能够轻松的保护任何应用,如移动端应用,大型web应用以及企业级应用. Shiro可…

当前主流的后端语言,谁能夺得桂冠,果然是后生可畏!

主流后端语言 如今编程语言遍地开花&#xff0c;烟花迷乱&#xff0c;小编整理了最流行的几种编程语言如下&#xff1a; 这几种语言都是经久不衰&#xff0c;占领着后端编程界的半壁江山。TIOBE上的语言排名&#xff1a; C、Java、python&#xff0c;C&#xff0c; C#鏖战榜首…

元宇宙浪潮下,数智人拒绝“标品”

作者 | 曾响铃 文 | 响铃说 在各地文博会、生活节等大型文娱活动上&#xff0c;在博物馆等各类场馆的线上平台&#xff0c;在企业与用户交互的窗口&#xff0c;在政务平台滚动政策宣讲片中&#xff0c;尤其是&#xff0c;在各大卫视的跨年晚会上…… 2022年末、2023年年初&a…

MyBatis Generator ORM层面的代码自动生成器

在日常开发工作中&#xff0c;我们往往需要自己去构建各种数据表所对应的持久化对象&#xff08;POJO&#xff09;、用于操作数据库的接口&#xff08;DAO&#xff09;以及跟 DAO 所绑定的对应 XML。这都是一些重复性的操作&#xff0c;不需要多大技术含量。MyBatis Generator工…