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

news/2024/5/18 22:43:16 标签: 数据库, jdbc

一: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.niftyadmin.cn/n/5072429.html

相关文章

基于虚拟同步发电机的孤岛逆变器控制策略(孤岛VSG)(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【浅谈IDE宏指令录制】为加速chrome扩展国际化,我从vscode回归notepad++

vscode 的宏录制功能 —— 差强人意 安装vscode开源扩展:https://github.com/C10udburst/macros-vscode.git 可开启类似于 notetepad 的宏录制与回放功能!比如录制字符串替换,能记录操作之时,替换对话框中的文本!&am…

蓝桥杯 字符串和日期

有一个类型的题目是找到输出图形的规律&#xff0c;然后将其实现。观察下面的图形。你想想你该怎么输出这个图形呢? ABBB#include<stdio.h> int main(){printf(" A\n");printf("BBB\n");return 0; }那么&#xff0c;对于如下的图形&#xff1a; ABB…

如何在Go中转换数据类型

引言 在Go中&#xff0c;数据类型用于对一种特定类型的数据进行分类&#xff0c;确定您可以分配给类型的值和可以对其执行的操作。编程时&#xff0c;有时需要在不同类型之间转换值&#xff0c;以便以不同的方式操作值。例如&#xff0c;你可能需要将数值与字符串连接起来&…

DRM全解析 —— encoder详解(1)

本文参考以下博文&#xff1a; Linux内核4.14版本——drm框架分析(3)——encoder分析 特此致谢&#xff01; 1. 简介 encoder是编码器/输出转换器&#xff0c;负责将CRTC输出的timing时序转换成外部设备所需要的信号&#xff0c;如HDMI转换器或DSI Controller。 具体来讲&a…

FPGA设计时序约束三、设置时钟组set_clock_groups

目录 一、背景 二、时钟间关系 2.1 时钟关系分类 2.2 时钟关系查看 三、异步时钟组 3.1 优先级 3.2 使用格式 3.3 asynchronous和exclusive 3.4 结果示例 四、参考资料 一、背景 Vivado中时序分析工具默认会分析设计中所有时钟相关的时序路径&#xff0c;除非时序约束…

理解一致性哈希算法

摘要&#xff1a;一致性哈希是什么&#xff0c;使用场景&#xff0c;解决了什么问题&#xff1f; 本文分享自华为云社区《16 张图解 &#xff5c; 一致性哈希算法》&#xff0c;作者&#xff1a;小林coding。 如何分配请求&#xff1f; 大多数网站背后肯定不是只有一台服务器…

台灯应该买什么样的才能护眼?教你如何挑选护眼台灯

台灯的作用主要是照明&#xff0c;便于阅读、学习、工作等&#xff0c;台灯已经远远超越了其本身的价值&#xff0c;甚至已经变成了一个艺术品&#xff0c;本文主要推荐几款护眼台灯&#xff0c;面对各种各样&#xff0c;性能不一台灯&#xff0c;怎样才能挑选一台适合的&#…