数据库实验三报告

嵌入式SQL与数据库编程

数据库连接技术简介

数据库连接技术概念

数据库连接技术是指建立并管理与数据库系统之间的连接的技术。它可以让应用程序与数据库系统之间共享数据,并提供高效、安全的数据访问方法。

常见的数据库连接技术

  • JDBC(Java Database Connectivity):
    它是Java平台中一个标准的API,可以访问各种关系型数据库系统,如MySQL、Oracle等。JDBC提供了一个统一的接口,可以让开发人员使用相同的API连接各种数据库系统。(本次实验采用该种技术
  • ODBC(Open Database Connectivity):
    它是一个开放的标准,可以让数据库系统与应用程序进行连接。ODBC提供了一种通用的接口,允许开发人员使用一套API代码来访问不同类型的数据库系统。
  • ORM(Object-relational mapping):
    它是一种将对象模型和关系型数据库之间的数据映射的技术。ORM可以将数据库中的表映射为对象,并提供一种易于使用和理解的API来进行数据的操作和处理。
  • JDBC Pool:JDBC Pool:
    基于数据库连接池的技术,通过在应用程序和数据库之间设置一层池集中管理数据库连接。连接池可以在应用程序和数据库之间缓存连接,当应用程序需要连接时,它可以从连接池中获取一个连接,并将它返回给池,从而提高连接的效率和性能。
  • ORM:ORM(Object-Relational Mapping):
    一种将对象模型与关系型数据模型进行映射的技术。ORM通常使用面向对象的思想来访问数据库,将数据库中的数据转换为面向对象的结构,从而实现使用面向对象的方式对数据库进行访问。
  • NoSQL:NoSQL(not only SQL):
    一种非关系型数据库的技术。NoSQL数据库不使用传统的SQL语言,而是使用其他查询语言或API来操作数据。
  • RPC:RPC(Remote Procedure Call):
    一种远程过程调用协议,用于实现在不同机器上的程序间进行通信和数据交互。RPC可以用于连接不同的数据库,实现分布式数据交互。

数据库连接环境配置

  • 数据库配置 :
    openGauss数据库:已建库 test_20201230 ;库内建8张表以及三个游客视图,如下:
  • 数据库服务器 :openEuler
  • web服务器及部署 :tomcat + eclipse + Windows10
  • 编程语言:java + JS + css + html5
  • 数据库连接技术:JDBC

嵌入式SQL的实现过程

测试连接

简单编写一个Java程序使用JDBC连接到openGauss数据库,测试连通性。

如图,连接成功。

编写web项目

珠海政府网站为例,简单做修改完成本次实验任务。

修改部分为:

  • 点击政务公开部分,会为游客用户显示实验二为游客设计的三张视图。




    由JSP结合servlet技术实现数据库查询并将查询结果做传输并整合输出。具体实现代码如图:

  • 增加内部管理人员登录界面,登录后可对数据库做简单操作。

  • 登陆成功提示以及用户标识



    具体实现代码如图:

  • 再次进入政务公开页面,可以看到管理选项


    任意点击修改内容


    修改成功!

    具体实现代码如图:

  • 删除内容测试

    由于删除的表中元组存在依赖完整性,且在建表时未使用 ON DELETE CASCADE 选项,故无法直接使用 delete 语句删除。此时思考有两种方案:

    • 方案一:可以设计每个表的删除触发器;
    • 方案二:修改每个表的属性,添加 ON DELETE CASCADE 选项;
      由于表数目较多,故决定采用方案二。
      修改员工表如下:

      其他表修改类似。
      修改成功后,就可以测试删除功能了:

      删除成功!点击返回确认已删除。

      实现代码截图:
  • 添加数据库信息测试

    录入新的数据有很多种情况:新增部门、新增职务、新增员工等,由于时间关系,在本次实验中仅实现增加员工功能。
    在主页面增加录入新员工数据选项

    点击进入后产生录入界面

    接着使用数据库存储过程完成录入后端设计。
    首先设计存储过程1:

    CREATE PROCEDURE new_user_insert1(
    IN eno  character(8),
    IN dno  character(2),
    IN ename  character(20),
    IN epasswd  character(12),
    IN esex  character(3),
    IN ebirth timestamp(0) without time zone,
    IN pname character(20),
    IN pno character(4)
    ) 
    AS 
    BEGIN 
        INSERT INTO empolyeer VALUES(eno, dno, ename, epasswd, esex, ebirth);
        INSERT INTO danren VALUES (eno,pno,ebirth);
    END;
    


    该功能为将有职务的员工信息在两个表内插入。类似的有职级部分插入的存储过程:

    CREATE PROCEDURE new_user_insert2(
    IN eno  character(8),
    IN dno  character(2),
    IN ename  character(20),
    IN epasswd  character(12),
    IN esex  character(3),
    IN ebirth timestamp(0) without time zone,
    IN rname character(20),
    IN rno character(4)
    ) 
    AS 
    BEGIN 
        INSERT INTO empolyeer VALUES(eno, dno, ename, epasswd, esex, ebirth); 
        INSERT INTO pinyong VALUES(eno, rno, ebirth);
    END;
    


    由于 danren 以及 pinyong 两张表在实验二中已设计触发器,可以自动修改为当前系统时间,故时间值任意插入。
    简单测试一下是否可用:



    可以使用。
    接着完成后端代码接入设计。
    测试插入功能:


    插入成功,点击返回查看,已完成插入。

    实现代码截图:

问题分析

  • 问题1:java项目中的数据库连接成功,但web项目始终无法连接成功。


    检查了用户密码正确以及web工程中jar包的复制及路径构建都没问题。
    最后通过查找资料发现是未将jar包复制到tomcat中,尝试了一下,连接成功。很奇怪!jar包明明已经在工程中了,为什么还需要为tomcat单独提供资源包。继续查找资料发现:正常情况下,在Web应用程序中包含了数据库驱动程序的依赖库,并且已经将这些依赖库添加到了项目的build path中,这样在重新构建Web应用程序后,就会将这些依赖库一并打包到WEB-INF/lib目录下。但是在将Web应用程序部署到Tomcat服务器之前,还需要将这些依赖库的JAR文件复制到Tomcat服务器的lib目录下,以便在Tomcat服务器启动时,能够正确地加载这些依赖库。这是因为Tomcat服务器在启动的时候,会先加载自己的Classpath,然后再加载Web应用程序的Classpath。如果Web应用程序中使用的依赖库未在Tomcat服务器的Classpath中找到,那么将无法正确地加载这些依赖库。

  • 问题2:在进行登录设计实现时,明明账户密码都是对的但登不了



    一直以为是代码有问题,不断调试才发现是openGauss在存储时char(8)时将未占满的位置全部以空格填充,因此尝试补满空格



    就很离谱。。。看来openGauss做登录的口令存储方案还是要好好琢磨琢磨的。

实验感想

此次试验花费了不少时间,尤其在最后这段时间有不少考试,做不完一直很焦虑。想做好,遇到各种bug,更焦虑···还好,坚持下来了。实验主要是应用的设计以及数据库存储过程部分花了不少时间,应用的方式呈现是主要的纠结点。很明显完成这样一个功能完善、健壮的应用差的还很远,还需要花费不少的时间。更别说针对应用的安全设计实现,简直工作量想想就能吓退不少人了。整体来说,收获很丰富。让我对数据库的理解以经不仅仅是一门课而更加倾向于一个工具。

posted @   201230RookieHacker  阅读(75)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示