一篇了解Java Web中的数据库开发的JDBC基础

一、数据库简介

数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,用户可以通过数据库提供的多种方式来管理数据库里的数据。

1.数据库分类

按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库(前两者已经基本消失)。而当今的互联网中,最常用的数据库模型主要有两种,即关系型数据库和非关系型数据库

2.关系型数据库介绍

关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联表的表格分类、合并、连接或选取等运算来实现对数据的管理。 

 Oracle数据库:主要应用范围为传统大企业、大公司、政府、金融、证券等;

MySQL数据库:主要应用范围为:互联网领域,大中小型网站,游戏公司,电商平台等,体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多大中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库,甚至国内知名的淘宝网也选择弃用Oracle而更换为更开放的MySQL。;

SQL Server主要应用范围为:部分企业电商,使用Windows服务器平台的企业,缺点是只能在Windows系统下运行;

Access是入门级小型桌面数据库,性能安全性都很一般。可供个人管理或小型网站使用;

MariaDB数据库管理系统是MySQL数据库的一个分支,主要由开源社区维护,采用CPL授权许可。

二、JDBC简介

JDBC在JDK中被定义,由一组用Java语言编写的类和接口组成,大致分为两类:针对Java程序员的JDBC API和针对数据库开发商的底层的JDBC Driver API,可以为多种关系数据库提供统一访问方法。

JDBC在Java程序和数据库之间起到了一个中间桥梁的作用,有了JDBC接口,就不必为访问MySQL数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问其他类型的数据库又编写另一个程序等,程序员只需用JDBC接口写一个程序就够了,就可以向各种数据库发送调用请求。

同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也体现了Java语言“通用性强”的优势。

API(Application Programming Interface,应用程序编程接口)在Java里是接口和实现接口的类以及相应的说明文档的统称,不仅指接口。

三、JDBC驱动

 1. JDBC-ODBC桥

JDBC-ODBC桥的工作原理是把JDBC调用转换为ODBC操作。通过桥使得所有支持ODBC的DBMS(数据库管理系统)都可以和Java应用程序进行交互。其中,JDBC-ODBC桥接口是作为一套共享动态C库来进行提供的。但是,它的工作原理从根本上限制了它在基于Web的应用程序中的使用。

2. 本地API驱动程序

本地API驱动程序的工作原理是直接将JDBC API翻译成具体数据库的API,将JDBC调用转换为对数据库的客户端API的调用。

3. 网络驱动程序

网络驱动程序的工作原理是将JDBC API转换成独立于数据库的协议。故JDBC驱动程序并没有直接和数据库进行通信,而是和一个中间件服务器通信,然后这个中间件服务器再和数据库进行通信。这种额外的中间层次看似更加复杂了,但是却大大地提供了灵活性,因为可以用相同的代码访问不同的数据库,同时中间件服务器也隐藏了Java应用程序的细节。

4. 纯Java驱动程序

纯Java驱动程序的工作原理是直接与数据库进行通信。很多程序员都认为这是最好的驱动程序,因为它不仅提供了最佳的性能,同时还允许开发者利用特定数据库的功能。

四、JDBC包

步骤1:下载jar包。到MySQL数据库的官网下载与JDK版本相对应的驱动程序的jar包,MySQL官网的驱动程序下载网址为https://dev.mysql.com/downloads/connector/j/,将此网址复制到浏览器的地址栏之后按Enter键即可进入下载页面。

步骤2:选择操作系统。找到Select Operating System下拉列表,选择其中的Platform Independent。

步骤3:选择压缩包。单击Platform Independent(Architecture Independent),ZIP Archive的Download按钮进行下载。

步骤4:开始下载。单击左下角的No thanks,just start my download.即可开始下载。

步骤5:解压。下载完成后,进入到浏览器的下载目录里。再将文件复制到一个磁盘目录下,以D盘根目录为例,将压缩包复制到D盘根目录下,然后将压缩包也解压至D盘根目录。解压完成后,打开解压的文件夹。

最后根据不同的软件进行配置。

五、JDBC常用的类和接口

JDBC在JDK中被定义,由一组用Java语言编写的类和接口组成,大致分为两类:针对Java程序员的JDBC API和针对数据库开发商底层的JDBC Driver API,可以为多种关系数据库提供统一访问方法。

1.Connection接口 

Connection接口在java.sql包中,是与数据库连接的对象,只有获得特定的数据库连接对象,才可以访问数据库进行数据库操作。它是Java集合的root接口,没有实现类,只有子接口和实现子接口的各种容器。主要用来表示Java集合这一大的抽象概念。

Connection接口要求所有实现此接口的容器,必须提供至少两种构造方法:无参数的构造方法,参数为Connection类的构造方法。后者需要创建一个具有和参数包含元素相同的新集合,以此来进行集合的复制。Java中所有的API均遵守此规则。 

2.DriverManager类 

DriverManager类中包含与数据库交互操作的方法,该类中的方法全部由数据库厂商提供。

 3.Statement接口

Statement接口是Java程序执行数据库操作的重要接口,用于已经建立数据库连接的基础之上,向数据库发送要执行的SQL语句,主要用于执行不带参数的简单的SQL语句。

4.PreparedStatement接口 

PreparedStatement接口位于java.servlet包中,它继承了Statement,但是PreparedStatement与Statement相比却有着很大的不同。一方面,PreparedStatement对象是经过预编译的,所以其执行速度比Statement对象速度快。所以,经常创建多次执行的SQL语句为PreparedStatement对象,以提高效率。另一方面,作为Statement的子类,PreparedStatement除了继承了Statement的一切功能外,还添加了一整套方法,用于设置发送给数据库以取代IN参数占位符的值。此外,Statement接口存在安全方面的缺陷,使用PreparedStatement接口,还可以避免SQL语句的注入或者攻击

5.ResultSet接口 

ResultSet接口是数据库结果集的结果表,通常是通过查询数据库的语句生成的。它主要提供了常用的从当前行检索列值的获取方法(getBoolean、getLong等)。

 

六.JDBC编程 

使用JDBC连接访问数据库需要经过以下几个步骤。

(1)加载数据库驱动。

(2)建立与数据库的连接。

(3)向数据库发送SQL命令。

(4)处理数据库的返回结果集。

(5)断开与数据库的连接。 

1.加载数据库驱动 

     //加载MySQL数据库驱动
     Class.forName("com.mysql.cj.jdbc.Driver");

2.建立与数据库的连接

     DriverManager.getConnection(String URL,String USER,String PASSWORD);

getConnection()方法的三个参数的含义如下。

(1)URL——数据库连接字符串,由数据库厂商制定,不同的数据库也有所区别,但是都遵循“JDBC协议+IP地址或域名+端口+数据库名称”的格式。例如,MySQL数据库的URL一般是“jdbc:mysql://locolhost:3306/test”,Oracle数据库的URL一般是“jdbc:Oracle:thin:@127.0.0.1:1521: test”。

(2)USER——连接数据库的用户名。

(3)PASSWORD——连接数据库的密码。

3.向数据库发送SQL命令 

通过Connection对象所提供的方法来创建各种Statement对象,主要有以下三种方法。

1. CreateStatement()方法用于创建一个基本的Statement对象,该对象主要用于执行静态SQL语句。

2. PrepareStatement(String sql)方法根据参数化的SQL语句创建一个经过预编译的PrepareStatement对象,该对象主要用于执行动态SQL语句。

3. PrepareCall(String sql)方法根据SQL语句来创建一个CallableStatement对象,该对象主要用于执行数据库存

获取Statement对象之后,就可以通过调用该对象的不同方法来执行不同的SQL语句。所有的Statement对象都有以下三种方法。

(1)ResultSet executeQuery(String sql):专用于查询。

(2)int executeUpdate(String sql):执行DDL、DML语句,前者返回0,后者返回受影响行数。

(3)boolean execute(String sql):可执行任何SQL语句。如果执行后第一个结果为ResultSet(即执行了查询语句),则返回true;如果执行了DDL、DML语句,则返回false。如果返回结果为true,则随后可通过该Statement对象的getResultSet()方法获取结果集对象;如果返回结果为false,则随后可通过Statement对象的getUpdateCount()方法获得受影响的行数。 

注意:Statement对象的上述三种方法都会抛出SQLException异常,应当用try-catch语句将其包围起来并捕获异常,来明确异常的可能原因,便于调试和解决出现的问题。 

4.处理数据库的返回结果集 

SQL的查询结果都是经过ResultSet封装的,ResultSet结果集(对象)中包含满足SQL查询语句的所有行,读取ResultSet结果集数据的方法主要是get×××(),它的参数可以是整型,表示第几列(是从1开始的);还可以是列名,返回的是对应的×××类型的值——如果对应那列是空值,×××是对象的话返回×××型的空值。

×××可以代表的类型有:基本的数据类型如整型(int)、布尔型(boolean)、浮点型(float, double)、比特型(byte)和一些特殊的类型,如日期类型(java.sql.Date)、时间类型(java.sql.Time)、时间戳类型(java.sql.Timestamp)等。另外,使用getString()则可以返回所有列的值,不过返回的都是字符串类型的。

此外,还可以使用getArray(int colindex/String columnname),通过这个方法获得当前行中,colindex所在列的元素组成的对象的数组。使用getAsciiStream(int colindex/String colname)可以获得该列对应的当前行的ascii流。

5.断开与数据库的连接

所有的操作都进行完以后要关闭JDBC来释放JDBC资源,以防止系统资源的浪费。

但是关闭的顺序要和刚开始定义对象的时候相反,就像关门一样,从里面先关,一直往外关

关闭的次序如下。

(1)关闭结果集,例如:rs.close()。

(2)关闭Statement对象,例如:stmt.close()。

(3)关闭连接,例如:con.close()。

6.数据库连接池技术

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;通过释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。

它的基本思想是:在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以便给下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等。

数据库连接池的最小连接数和最大连接数的设置通常需要考虑到以下几个因素。

(1)最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。

(2)最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作。

(3)如果最小连接数与最大连接数相差很大,那么最先连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空间超时后被释放。

一般都是通过编写实现java.sql.DataSource接口来实现连接池。DataSource接口中定义了两个重载的getConnection方法:Connection getConnection()和Connection getConnection(String username, String password)来实现DataSource接口的功能。

所以实现连接池功能的步骤如下。

步骤1:在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。

步骤2:实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。当用户使用完Connection,调用Connection.close()方法时,Connection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。 

就业面试解析与技巧 

面试官:什么是JDBC?你在什么时候会用到它?

应聘者:JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库。

JDBC接口及相关类在java.sql包和javax.sql包里。我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。

技巧:答案不是唯一的,只要说出JDBC的用途和特点即可,另外要敢于发表自己的看法和意见,用批判性和前瞻性的眼光回答问题将更容易得到HR的赏识。

面试官:Java中有哪些不同类型的JDBC驱动?请对它们进行简要的说明和分析。

应聘者:Java中的JDBC驱动根据不同的工作原理可以分为4种类型,分别如下。

(1)JDBC-ODBC Bridge plus ODBC Driver:它使用ODBC驱动连接数据库。需要安装ODBC以便连接数据库,正因为这样,这种方式现在已经基本淘汰了。(

2)Native API Partly Java Technology-enabled Driver:这种驱动把JDBC调用适配成数据库的本地接口的调用。

(3)Pure Java Driver for Database Middleware:这个驱动把JDBC调用转发给中间件服务器,由它去和不同的数据库进行连接。用这种类型的驱动需要部署中间件服务器。这种方式增加了额外的网络调用,导致性能变差,因此很少使用。

(4)Direct-to-Database Pure Java Driver:这个驱动把JDBC转换成数据库使用的网络协议。这种方案最简单,也适合通过网络连接数据库。不过使用这种方式的话,需要根据不同数据库选用特定的驱动程序,比如OJDBC是Oracle开发的Oracle数据库的驱动,而MySQL Connector/J是MySQL数据库的驱动。

技巧:只要根据工作原理对4种类型的驱动进行简单的说明和分析即可。另外,总结一下它们目前的应用现状及其原因更易获得HR的赏识。

面试官:什么是JDBC连接?在Java中如何通过JDBC建立一个Java程序与数据库的连接?

应聘者:JDBC连接就是Java程序和数据库服务器建立的一个会话。建立一个JDBC连接只需要两个步骤:加载数据库驱动,建立与数据库的连接。

技巧:建立JDBC连接只需要两个步骤,而JDBC连接访问数据库(又叫作JDBC编程)则需要5个步骤,要注意将两者区分开来。 

面试官:数据库连接池的工作机制是什么?

应聘者:在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以便给下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。

技巧:用自己的语言将工作机制描述清楚即可,注意不要写一些套话和空话,越简洁越好。 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 宿舍管理系统是一种针对大学、学校里的宿舍管理而开发的系统。对于大学来说,宿舍管理系统可以帮助学校方便地管理学生宿舍信息、入住信息、设备管理以及一些其他相关功能。 首先,宿舍管理系统需要有一个用户登录界面,可以区分管理员和学生用户。管理员拥有对系统的全部权限,可以添加、删除、修改学生宿舍信息,管理宿舍房间以及设备的分配。而学生用户能够查看自己的宿舍信息,申请更换宿舍,反馈宿舍设备问题等。 宿舍管理系统还需要一个信息管理模块,用于管理宿舍楼、宿舍房间和设备等信息。管理员可以对宿舍楼进行分配、调整,对宿舍房间进行分配、调整,并且可以对设备进行添加、修改和删除等操作。 另外,宿舍管理系统还需要一个入住管理模块,用于管理学生的入住信息。管理员可以添加学生的入住信息,包括学生的基本信息、宿舍楼、宿舍房间等信息,还可以对学生的入住情况进行统计和查询。 宿舍管理系统还需要一个设备管理模块,用于管理宿舍设备的分配和维修。管理员可以对设备进行添加、修改和删除,还可以记录设备的维修情况和维修人员等信息。 总结来说,宿舍管理系统通过提供一个方便、高效的管理平台,可以帮助学校方便地管理学生宿舍信息、入住信息、设备管理等功能。对于大学来说,宿舍管理系统是提升宿舍管理效率、提供更好的宿舍服务的重要工具。而在实际开发过程Java Web开发实战经典基础的知识和技术将会对宿舍管理系统的开发起到重要的指导作用。 ### 回答2: 宿舍管理系统是一个用于管理学生宿舍信息的系统,可以实现宿舍分配、入住管理、费用管理、报修管理等功能。 Java Web开发实战经典基础篇是一本教授Java Web开发的经典教材,其包含了Java Web开发基础知识、技术和案例分析。通过学习这本教材,读者可以掌握Java Web开发的基本概念和流程,了解Java Web应用的开发框架和工具,能够独立完成简单的Java Web项目开发。 宿舍管理系统的开发可以借助Java Web开发实战经典基础篇提供的知识和案例进行。首先,我们可以使用Java Web开发的MVC模式对系统进行设计和实现。MVC模式将系统分为Model、View和Controller三个层次,分别负责处理数据逻辑、展示和用户交互。 在宿舍管理系统,Model层负责数据库的操作和管理,包括学生和宿舍的信息存储和查询;View层负责系统的界面展示,包括宿舍列表、学生信息和费用情况等;Controller层负责处理用户的请求和逻辑处理,包括学生入住申请、费用缴纳和报修处理等操作。 在开发过程,可以使用Java Web开发实战经典基础篇提供的技术和工具来辅助开发。例如,可以使用Java的JSP和Servlet技术来实现系统的界面和请求处理;可以使用JavaJDBC技术来操作数据库;可以使用HTML和CSS来设计和美化系统的界面。 总之,通过学习和应用Java Web开发实战经典基础的知识,我们可以开发出一个功能完善的宿舍管理系统。这个系统不仅可以提高宿舍管理的效率,还可以提供学生入住和居住质量的监管,为学校和学生提供便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值