JDBC-day01(JDBC概述,获取数据库连接)

news2024/11/19 11:27:30

一:JDBC概述

1.数据持久化

  • 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成
  • 简单来说,数据持久化就是将数据保存到数据库或硬盘的过程
    在这里插入图片描述

2.Java中的数据存储技术

主要可分为:

  • JDBC直接访问数据库
  • 第三方O/R工具,如:Hibernate, Mybatis
  • JDO(Java Data Object)技术

JDBC是Java访问数据库的基础,第三方O/R工具与JDO都只是更好的封装了JDBC。

3.JDBC

  • JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库(java.sql,javax.sql),使用这些类库可以以一种标准的方法、方便地访问数据库资源。
  • 实际的数据库连接
    在这里插入图片描述
  • JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。

在这里插入图片描述

  • JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

4.JDBC体系

JDBC接口(API)包括两个层次:

  • 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
    • JDBC是Java维护公司提供一套用于数据库操作的接口,java程序员只需要面向Java API即可。
  • 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。
    • 不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。

5.JDBC的编程过程

在这里插入图片描述

二:获取数据库连接

1.Driver接口实现类

  • java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。由数据库厂商负责实现与使用的,不同数据库厂商提供不同的实现。

  • 在使用者编写程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。

    • Oracle的驱动:oracle.jdbc.driver.OracleDriver
    • MySQL的驱动: com.mysql.jdbc.Driver*

2.URL

用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
JDBC URL的标准由三部分组成,各部分间用冒号分隔。

  • jdbc:子协议:子名称
  • 协议:JDBC URL中的协议总是jdbc
  • 子协议:子协议用于标识一个数据库驱动程序
  • 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号,数据库名

    在这里插入图片描述

3.jar包的安装

数据库的jar包就提供了数据库厂商负责实现与使用的数据库驱动
mysql-connector-java-5.1.37-bin.jar
将上述jar包(mysql5.1.37)拷贝到Java工程的一个目录中,习惯上新建一个lib文件夹。
在驱动jar上右键–>Build Path–>Add to Build Path
在这里插入图片描述
在这里插入图片描述

注意:如果是Dynamic Web Project(动态的web项目)话,则是把驱动jar放到WebContent(有的开发工具叫WebRoot)目录中的WEB-INF目录中的lib目录下即可

4.获取数据库连接

package com.jdbc1.connection; 

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import org.junit.Test;

public class ConnectionTest {
	//方式一:
	@Test
	public void testConnection() throws SQLException {
		Driver driver = new com.mysql.jdbc.Driver();
		//jdbc:mysql:协议
		//localhost:ip地址
		//3306:端口号
		//test:test数据库
		String url = "jdbc:mysql://localhost:3306/test";
		//将用户名和密码封装成Properties对象中
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "123456");
		
		Connection conn = driver.connect(url, info);
		
		System.out.println(conn);	
	}
	
	//方式二:对方式一的迭代(在程序中不出现第三方API,使程序移植性更好)
	@Test
	public void testConnection2() throws Exception {
		//1.获取Driver实现类对象:使用反射
		Class clazz = Class.forName("com.mysql.jdbc.Driver");
		Driver driver = (Driver)clazz.newInstance();
		//2.提供连接数据库
		String url = "jdbc:mysql://localhost:3306/test";
		//3.将用户名和密码封装成Properties对象中
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "123456");
		//4.连接
		Connection conn = driver.connect(url,info);
		System.out.println(conn);	
	}
	
	//方式三:使用DriverManager替换Driver
	@Test
	public void testConnection3() throws Exception {
		//1.获取Driver实现类对象
		Class clazz = Class.forName("com.mysql.jdbc.Driver");
		Driver driver = (Driver)clazz.newInstance();
		
		//2.提供三个基本连接的信息
		String url = "jdbc:mysql://localhost:3306/test";
		String user = "root";
		String password = "123456";
		
		//3.注册驱动
		DriverManager.registerDriver(driver);
		
		//4.获取连接
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);	
		
	}
	
	//方式四:只用加载驱动,不用显示注册驱动
		@Test
		public void testConnection4() throws Exception {
			//1.提供三个基本连接的信息
			String url = "jdbc:mysql://localhost:3306/test";
			String user = "root";
			String password = "123456";
			
			//2.加载Driver
			//相较于方式三可以省略如下步骤:(在mysql的Driver实现类中声明了驱动的注册)
			Class clazz = Class.forName("com.mysql.jdbc.Driver");
//			Driver driver = (Driver)clazz.newInstance();
//			//3.注册驱动
//			DriverManager.registerDriver(driver);
			
			//4.获取连接
			Connection conn = DriverManager.getConnection(url, user, password);
			System.out.println(conn);	
			
		}	
		//方式五(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
		//好处:
		//1.实现数据与代码的分离,实现了解耦
		//2.需要修改配置文件信息时,可以避免程序重新打包
		@Test
		public void getConnection() throws Exception {
			//1.读取配置文件中的配置信息
			InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
			Properties pros = new Properties();
			pros.load(is);
			
			String user = pros.getProperty("user");
			String password = pros.getProperty("password");
			String url = pros.getProperty("url");
			String driverClass = pros.getProperty("driverClass");
			
			//2.加载驱动
			Class.forName(driverClass);
			
			//3.获取连接
			Connection conn = DriverManager.getConnection(url,user,password);
			System.out.println(conn);
		}
}

注:方式五中配置文件声明在工程的src目录下:【jdbc.properties

user=root
password=123456
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver

你电脑上一定要装数据库,没有的话,都是白做,上面的用户名和密码根据自己的数据库情况来

感谢大家的支持,关注,评论,点赞!
参考资料:尚硅谷_宋红康_JDBC核心技术

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

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

相关文章

现货白银图表分析的依据

现货白银的行情图表分析其实与股票的差不多,投资者可以结合均线、k线的变化,来分析实时的行情走势。当走势图的均线呈多头排列,即短期、中期、长期均线依次从上到下排列并向右上方运行,且白银价格沿各均线向右上方拉升&#xff0c…

小匠物联获评2023年度浙江省省工业设计企业

小匠物联省工业设计企业 2023年9月25日,浙江省经济和信息化厅公布了2023年度省级工业设计中心拟认定名单。 喜报传来,小匠物联成功通过认定,荣获2023年度浙江省省工业设计企业称号。 小匠物联获权威肯定 浙江省人民政府此次开展省级工业设计中…

【赠书活动】Excel透视表的简单应用

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

2023年中国铁路安全行车系统市场规模现状及行业细分市场分析[图]

铁路行车安全系统是铁路运输组织信息系统的组成部分,涉及铁路通信系统、铁路信号系统、行车监测系统、信号联锁系统、车号识别及其他等。 在我国铁路营业里程不断增长、行车速度逐步提高、列车运行密度不断加大的背景下,运输安全控制需求日益提升。我国铁…

【Sentinel】Sentinel原码分析

本文内容来自【黑马】Sentinel从使用到源码解读笔记,做了部分修改和补充 目录 Sentinel 基本概念 基本流程 Node Entry 定义资源的两种方式 使用try-catch定义资源 使用注解标记资源 基于注解标记资源的实现原理 Context 什么是Context Context的初始化 …

andriod studio运行失败设置

(1) 重新设置maven maven("https://maven.aliyun.com/nexus/content/groups/public/")(2) 删除dependencies中的maven依赖 (3)

和力链携手纷享销客推动CRM业财一体化,引领大健康产业数智化发展

两化深度融合正在加速产业转型升级、重塑产业结构,为传统行业注入发展新活力,江西和力物联实业有限公司(以下简称“和力链”)正是这样一家推动医药大健康产业数智化发展的高新技术企业。 和力链是国内首家大健康供应链产能数字化…

【MySQL实战45讲-基础篇】

基础篇 基础架构 MySQL的基本架构示意图:MySQL可以分为Server层和存储引擎层两部分。 Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函…

Leetcode hot 100之双指针(快慢指针、滑动窗口)

目录 数组 有序的平方仍有序 删除/覆盖元素 移动零:交换slow和fast 滑动窗口:最短的连续子串(r可行解->l--最短解) 最小长度的子数组 求和:sort、l i 1, r len - 1 三数之和abctarget 四数之和abcdtarg…

table表格初始化根据字段数字排序,table表格进入后返回上一级设置,第一级隐藏

根据字段数字排序 // 初始化表格数据 const getTableData async () > {try {loading.value trueconst res await getFileList() //排序const sortedData computed(() > {return res.slice().sort((a: any, b: any) > a.documentType - b.documentType);});tableD…

【Spring Boot | 第一篇】Spring Boot 原理

前言: 当今互联网时代,随着软件开发的快速发展,开发者们迫切需要一个简单、高效、可扩展的框架来提升开发效率和质量。Spring Boot作为一款备受欢迎的Java框架,应运而生。 Spring Boot以其优雅的设计和丰富的功能,成…

2023年中国铁路行车监测系统竞争格局、市场规模及行业发展趋势分析[图]

铁路行车监测系统是对铁路列车及车载设备运行状态全面监测的车载行车安全系统,是智能化、自动化等技术在铁路行业的具体应用。行车监测系统主要包括机车车载安全防护系统(简称6A系统)、机车远程监测与诊断系统(简称CMD系统&#x…

编译工具链 之二 详解 ELF 格式及标准、UNIX 发展、ABI

在计算机及嵌入式系统中,二进制文件也有一定的标准格式,通常会包含在各平台的应用程序二进制接口 (Application Binary Interface,ABI)规范中。它是编译工具链必须要遵守的规范(编译工具链产生符合 ABI 的二…

【数字图像处理第四版课后习题答案】第2章 数字图像基础(含英文原版)

2.1暂无 2.2 翻译答案 如图 P2.3 所示,视网膜图像中与点相对应的直径 x 是由类似的三角形得到的。即 得出 x 0.085d。根据第 2.1 节中的讨论,并结合一些自由解释,我们可以将眼窝视为一个方形传感器阵列,拥有大约 337,000 个元素…

6-3 递增的整数序列链表的插入 分数 5

List Insert(List L, ElementType X) {//创建结点List node (List)malloc(sizeof(List));node->Data X;node->Next NULL;List head L->Next; //定位real头指针//空链表 直接插入if (head NULL) {L->Next node;node->Next head;return L;}//插入数据比第…

一文全面解读CKA认证的含金量、详细介绍!

K8s是目前最流行的开源容器编排引擎,在全球都得到了广泛应用,BAT、京东、360、华为、网易、IBM、知乎等国内外诸多知名公司都在基于K8s构建企业容器云平台,支撑公司业务,越来越多的企业也都在向K8s迁移。相信在不远的将来&#xf…

winform中DevExpress控件一些属性

1.DevExpress控件bar去掉前面四点和后面的倒三角。 如图。设置bar属性optionsBar→allowQuickCustomizationFALSE

Leetcode hot 100之前缀和、差分数组、位运算

目录 差分数组-区间增减 和为K的子数组:前缀和 哈希表优化 除自身以外数组的乘积:前后缀区间 差分数组-区间增减 想对区间 nums[i..j] 的元素全部加 3,那么只需要让 diff[i] 3,然后再让 diff[j1] - 3 和为K的子数组&#x…

广州华锐互动:VR动物解剖实验室带来哪些便利?

随着科技的不断发展,我们的教育方式也在逐步变化和进步。其中,虚拟现实(VR)技术的应用为我们提供了一种全新的学习方式。尤其是在动物解剖实验中,VR技术不仅能够增强学习的趣味性,还能够提高学习效率和准确性。 由广州华锐互动开发…

Web_python_template_injection SSTI printer方法

这题挺简单的 就是记录一下不同方法的rce python_template_injection ssti了 {{.__class__.__mro__[2].__subclasses__()}} 然后用脚本跑可以知道是 71 {{.__class__.__mro__[2].__subclasses__()[71]}} 然后直接 init {{.__class__.__mro__[2].__subclasses__()[71].__i…