JDBC-基本概念

一、概念

引用IBM官网文档的介绍:Java™ database connectivity (JDBC) is the JavaSoft specification of a standard application programming interface (API) that allows Java programs to access database management systems. The JDBC API consists of a set of interfaces and classes written in the Java programming language.

因此,JDBC(Java数据库连接)就是Java程序用于连接数据库的一套标准的API,由一系列的接口与类组成。

二、再理解

理解一个技术,要理解这个技术为什么产生,是解决了当时的什么问题,这样能帮助我们将不断迭代的技术连贯起来。

假想若不存在JDBC,由于市场上有多种关系型数据库(MySQL,ORACLE,DB2等),Java程序想连接不同厂商的数据库,代码层面的实现肯定是不同的。所以对Java程序使用数据库势必是一个麻烦(需要了解Java程序连接不同数据库的实现方式),而且如果需要更换数据库时也会造成不小的影响。因此,如果存在一套API,可以规范化Java访问各种数据库的方式,那将会大大减小切换数据库的成本。基于此,JDBC应运而生了。

上述的概念介绍中提到,JDBC只是一套接口,接口的功能依赖于其实现类。如果你理解了上面一段话,大概能猜想到,这里的实现类就是各个数据库厂商(MySQL,ORACLE,DB2)对JDBC这一套API的具体实现。对于这种实现类,我们称之为驱动(driver)。至此,你是否能够理解maven项目中通常需要引入以下依赖呢?这就是帮助Java程序连接MySQL数据库的JDBC实现类,即MySQL驱动。

<!--MySQL driver-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
三、示例

JDBC的使用非常简单,代码片段与注释如下:

package com.xxx.test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JDBCDemo {public static void main(String[] args) throws ClassNotFoundException, SQLException {// 数据库连接地址,注意格式 jdbc:mysql://ip:port/db_name?参数键值对1&参数键值对2String url = "jdbc:mysql://";// 数据库用户String user = "";// 数据库密码String password = "";// 注册驱动,在MySQL5.6之后可以删除Class.forName("com.mysql.cj.jdbc.Driver");// 获取数据库连接Connection connection = DriverManager.getConnection(url, user, password);// 定义sqlString sql = "update user set phone = '234' where id = 1";// 获取执行sql的对象Statement statement = connection.createStatement();// 执行更新语句int i = statement.executeUpdate(sql);// 释放资源connection.close();statement.close();}
}

其中Class.forName(com.mysql.cj.jdbc.Driver)是通过类名加载类,我们点进Driver类发现,当该类一旦被加载时,static代码块就会执行,所以真正加载驱动的逻辑在这里。在MySQL5.6之后,这一行可以去掉了。

package com.mysql.cj.jdbc;import java.sql.DriverManager;
import java.sql.SQLException;public class Driver extends NonRegisteringDriver implements java.sql.Driver {public Driver() throws SQLException {}static {try {DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}
}
四、多说几句

从上面的代码,可以看到使用JDBC时用到的DriverManager,Connection,Statemement需要引入的包都是java.sql,这意味着这几个类是由Java官方推出的,这正印证了JDBC是一套Java官方定义的一套接口与类这句话。更近一步,点进getConnection, createStatement, executeUpdate方法内部,可以看到都是(或者内部实现调用了)抽象接口。查看这些接口的实现,可以索引到引入的MySQL驱动对这些接口的实现,而这些实现类的导入包,则换成了com.mysql.xxx,即由数据库厂商所实现的。也解完了这些,便对JDBC的概念有了基本的掌握了。

阅读至此,读者可能会有几个问题:

(1)关于JDBC的更多使用细节,业务中常用的增、删、改、查如何用JDBC实现呢?于是,关于JDBC常用的API,可看这篇文章。

(2)获取数据库的连接时需要填入的信息(数据库地址、用户、密码)像以上示例一样写死在代码中,是否不利于维护呢?而且每个请求就重复这个动作是否需要考虑优化?于是,关于数据库连接池,可看这篇文章。

(3)上述示例中,SQL语句与Java代码揉杂在一起并不利于维护,而且返回的结果集只能逐个属性获取,若要封装成一个对象还需要手动set完成,这似乎也是比较繁琐的过程。技术发展如何解决这一问题呢?可看这篇文章关于MyBatis的基本概念。

五、意外情况

如果这里使用的是云服务器,遇到过以下问题。下面的一些思路可估大家参考,与本篇主线不相关。

本机mysql客户端访问云服务器docker容器mysql数据库无法连接的问题解决记录

1、 服务器是否未暴露3306端口:可能未用-p命令将宿主机端口与容器端口进行绑定: 在服务器内部运行: netstat -an | grep 3306

2、防火墙未打开3306端口:firewalld查看防火墙相关

3、数据库权限问题 mysql库user表 select host, user from mysql.user;

4、问题所在:需要在阿里云服务器控制面板放开3306端口限制(华为云是安全组入访规则):所以这里telnet ip 22可以通,但是telnet ip 3306不通。

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

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

相关文章

CAD安装教程

CAD安装教程 目录 一&#xff0e; 下载CAD二&#xff0e; 安装CAD 一&#xff0e; 下载CAD 如果需要CAD安装包请私信。 二&#xff0e; 安装CAD 解压压缩包AutoCAD2022中文版&#xff0c;以管理员身份运行AutoCAD_2022_Simplified_Chinese_Win_64bit_dlm.sfx。 选择解压路径。…

【sklearn练习】datasets的使用

一、数据集分类 1、fetch类的数据集&#xff1a; 以 "fetch" 开头的数据集&#xff0c;这些数据集通常不包含在 scikit-learn 的标准安装中&#xff0c;需要从远程服务器上下载。这些数据集通常比标准数据集更大&#xff0c;因此在使用它们之前&#xff0c;需要通过…

Spring MVC中@ExceptionHandler注解的智能处理机制——无需显示指定异常类型

概述 在深入探讨Spring MVC框架时&#xff0c;我们经常会遇到异常处理的相关场景。其中&#xff0c;ExceptionHandler注解是一个非常重要的工具&#xff0c;它允许我们声明一个方法来专门处理特定类型的异常。有趣的是&#xff0c;Spring容器具备智能化的异常类型关联功能&…

【笔记1-4】Qt系列:使用QSetting保存画面状态

参考文献1 参考文献2 制作UI的过程中&#xff0c;会有需要保存UI画面状态的需求&#xff0c;例如&#xff0c;保存文本框的内容&#xff0c;保存勾选框的状态等&#xff0c;除了使用txt进行读写外&#xff0c;还可以使用QSetting类将UI状态保存到配置文件.ini中 QSetting的初…

自动驾驶:低阶可部署的单目测距算法-基于YOLO与透视变换

一、开发环境 部署平台&#xff1a;英伟达的Jetson Nano 环境&#xff1a;Linux ROS 语言&#xff1a;C 设备&#xff1a;1920*1080像素的摄像头、开发板。 模型&#xff1a;yolo-v8s 二、单目测距实现思路 0、标定相机和车辆&#xff08;假设已经标定完成&#xff09; 1、通…

06-微服务-SpringAMQP

SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交…

[论文阅读] Revisiting Feature Propagation and Aggregation in Polyp Segmentation

[论文地址] [代码] [MICCAI 23] Abstract 息肉的准确分割是筛查过程中有效诊断结直肠癌的关键步骤。 由于能够有效捕获多尺度上下文信息&#xff0c;普遍采用类似UNet 的编码器-解码器框架。 然而&#xff0c;两个主要限制阻碍了网络实现有效的特征传播和聚合。 首先&#xff…

基于SSM的企业员工管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

[AutoSar]基础部分 RTE 04 数据类型的定义及使用

目录 关键词平台说明一、数据类型分类二、Adt三、Idt四、Base 数据类型五、units六、compu methods七、data constraint 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、数据…

python自动化测试面试题与答案汇总

对于机器学习算法工程师而言,Python是不可或缺的语言,它的优美与简洁令人无法自拔,下面这篇文章主要给大家介绍了关于30道python自动化测试面试题与答案汇总的相关资料,需要的朋友可以参考下 1、什么项目适合做自动化测试&#xff1f; 关键字&#xff1a;不变的、重复的、规范…

编程笔记 html5cssjs 024 HTML表单元素

编程笔记 html5&css&js 024 HTML表单元素 <input> 元素 最重要的表单元素是 <input> 元素。<select> 元素&#xff08;下拉列表&#xff09;<option> 元素定义待选择的选项。<textarea> 元素<button> 元素HTML5 表单元素 表单是由…

ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript

ts axios 指定返回值类型&#xff0c;返回数据类型不确定该怎么办 typescript 转到 ts 以来&#xff0c;一直有个问题困扰着我&#xff0c;就是每次用 axios 获取数据时&#xff0c;返回值 res 的类型都不能确定&#xff0c;这就导致编辑器一直提示我&#xff1a; 原因 原因是…

SPON世邦 IP网络对讲广播系统 多处文件上传漏洞复现

0x01 产品简介 SPON世邦IP网络对讲广播系统是一种先进的通信解决方案,旨在提供高效的网络对讲和广播功能。 0x02 漏洞概述 SPON世邦IP网络对讲广播系统 addscenedata.php、uploadjson.php、my_parser.php等接口处存在任意文件上传漏洞,未经身份验证的攻击者可利用此漏洞上…

Mac M1 Parallels CentOS7.9 Deploy Docker + Rancher + K8S(HA+More Master)

一、准备虚拟机资源 虚拟机清单 机器名称IP地址角色rancher10.211.55.200管理K8S集群k8svip10.211.55.199K8S VIPmaster0110.211.55.201K8S集群主节点master0210.211.55.202K8S集群主节点master0310.211.55.203K8S集群主节点node0110.211.55.211K8S集群从节点node0210.211.55…

Vue 自定义仿word表单下拉框组件,让操作更符合用户习惯

预览时显示界面 进入编辑框时 组件代码 <template><div class "paper-select ui-select flex flex-col full-width" ><div ref"content" class"content font-s flex flex-center-cz padding-left-m padding-right-m flex-space-be…

C++入门教程,C++基础教程(第一部分:从C到C++)七

由C语言发展而来的一种面向对象的编程语言。 第一部分、从C语言到C 本章讲述 C 语言的简史&#xff0c;以及 C 语言中与面向对象关系不大、C语言中没有的特性。这些特性能够增加编程的便利性&#xff0c;提高程序的可扩充性。 十三、如何规范地使用C内联函数 inline 关键字…

Mac M1 Parallels CentOS7.9 Install Parallels Tools

一、挂载parallels-tools安装包 mkdir /media/cdrom/ mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 写保护&#xff0c;将以只读方式挂载二、GCC升级 yum install -y centos-release-scl yum install -y devtoolset-8-gcc*# 切换当前会话中gcc版本为8 scl enable devtool…

TypeScript 从入门到进阶之基础篇(八)函数篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

Open CASCADE学习|Draw Harness

目录 显示长方体 提供帮助信息 执行文件 记录交互式命令 使用getsourcefile可以快速查找到Tcl命令对应的C源文件 在Tcl中内置了一些变量&#xff0c;并赋予了一定的功能。内置变量列表如下&#xff1a; 退出 加载插件 在屏幕显示变量 返回绘图变量信息 视图 mu, md…

【Spring实战】25 Spring Boot Admin 应用

文章目录 1. 查看健康信息2. 使用 Micrometer 和 "/metrics"3. 管理包和类的日志级别4. 其他功能总结 Spring Boot Admin 是一个功能强大的工具&#xff0c;用于监控和管理多个 Spring Boot 应用程序。通过上一篇文章 【Spring实战】24 使用 Spring Boot Admin 管理…