JDBC-1(概述&建立)
基于宋红康老师所讲JDBC所作笔记
1.JDBC概述
1.1 数据持久化
- 持久化:将数据保持到可掉电式存储设备中以供之后使用。
数据持久化意味着将内存中的数据保存到硬盘上加以固化,实现过程大多通过各种关系数据库完成。
主要应用:将内存中的数据存储在关系型数据库中(也可存储于磁盘文件、XML数据文件中)
1.2 Java中的数据存储技术
- JDBC直接访问数据库
- JDO(Java Data Object)技术
- 第三方O/R工具(Mybatis)
1.3 JDBC介绍
- JDBC(Java Database Connectivity)独立于特定数据库管理系统,通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库
- JDBC为访问不同数据库提供了统一的途径,屏蔽了一些细节问题
- JDBC的目标是使Java程序员使用JDBC链接任何提供了JDBC驱动程序的数据库系统,使程序员无需对特定数据库系统特点有过多了解,简化加快开发过程。
1.4 JDBC体系结构
- JDBC接口(API)包括两个层次:
- 面向应用的API:Java API,抽象接口,供程序开发人员使用(链接数据库,执行SQL语句,获得结果)
- 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序
2.JDBC连接
2.1 Driver
2.1.1 Driver接口简介
- java.sql.Driver接口是所有JDBC驱动程序需要实现的接口,该接口提供给数据库厂商使用,不同数据库厂商提供不同实现。
- 程序中不需直接访问Driver接口实现类,由驱动程序管理器类调用这些类
- MySQL:com.mysql.cj.jdbc.Driver(引入jar包为8.0版本)
2.1.2 加载与注册JDBC
2.2 URL(统一资源定位符)
- URL用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序从而建立到数据库的连接。
- URL由三部分组成 jdbc:子协议:子名称
String url = "jdbc:mysql://localhost:3306/user_db?serverTimezone=UTC";- 协议 jdbc
- 子协议:mysql
- 一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号,数据库名
注:jdbc:mysql://localhost:3306/atguigu?useUnicode=true&characterEncoding=utf8(如果JDBC程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
2.3 用户名和密码
- user,password可以用“属性名=属性值”方式告诉数据库
- 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接
2.4 数据库连接方式举例
方式一
点击查看代码
public class ConnectionTest {
@Test
public void testConnection1() throws SQLException {
Driver driver = new com.mysql.cj.jdbc.Driver();
//jdbc:mysql 协议
//localhost: ip地址
//3306:默认mysql端口号; test:数据库
String url = "jdbc:mysql://localhost:3306/user_db?serverTimezone=UTC"; //统一资源定位符
//将用户名和密码封装在此
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "root");
Connection connection = driver.connect(url, info);
System.out.println(connection);
}
}
方式二:不出现第三方API,使程序具有更好可移植性
点击查看代码
@Test //2禁止第三方迭代
public void testConnection2() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
//1.用反射实现获取Driver实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
//2.提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/user_db?serverTimezone=UTC";
//3.提供连接需要的用户名和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "root");
//4.获取链接
Connection connection = driver.connect(url, info);
System.out.println(connection);
}
方式三:使用DriverManager替换Driver
点击查看代码
@Test //3使用DriverManager替代Driver
public void testConnection3() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
//1.使用DriverManager替代Driver
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
//2.提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/user_db?serverTimezone=UTC";
//3.提供连接需要的用户名和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "root");
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
//4.获取链接
Connection connection = DriverManager.getConnection(url, info);
System.out.println(connection);
}
方式四:
点击查看代码
@Test //4 相较于方式三省略类的显式加载流程(与MySQL Driver实现类静态代码块有关)
public void testConnection4() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
//1.获取三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/user_db?serverTimezone=UTC";
String user = "root";
String password = "root";
//2.加载Driver(Driver提供了一个静态代码块,加载时自动执行)
Class.forName("com.mysql.cj.jdbc.Driver");
//3.获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection.toString());
}
}
方式五:使用配置文件加载四个配置信息
点击查看代码
@Test //5 将数据库连接的基本信息配置在配置文件中,通过读取配置文件的方式获取连接
public void testConnection5() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {
//1. 读取配置文件的4个配置信息
InputStream inputStream = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties prop = new Properties();
prop.load(inputStream);
String user = prop.getProperty("user");
String password = prop.getProperty("password");
String url = prop.getProperty("url");
String driverClass = prop.getProperty("driverClass");
//2.加载驱动
Class.forName(driverClass);
//3.启动连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
点击查看配置文件jdbc.properties
url=jdbc:mysql://localhost:3306/user_db?serverTimezone=UTC
user=root
password=root
driverClass=com.mysql.cj.jdbc.Driver
优势:
- 实现数据和代码的分离,降低程序耦合度
- 如果需要修改配置文件信息,可避免程序重新打包
JDBC-1(概述&建立)的更多相关文章
- 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...
- 【Java123】JDBC数据库连接池建立
需求场景:多SQL任务多线程并行执行 解决方案:建立JDBC数据库连接池,将线程与连接一对一绑定 https://www.cnblogs.com/panxuejun/p/5920845.html ht ...
- JDBC连接数据库概述
直接介绍JDBC连接数据库的流程及其原理 创建一个以JDBC连接数据库的程序,包含7个步骤 1.加载JDBC数据库驱动 在连接数据库之前,首先要加载想要连接的数据库的驱动,就是数据库厂商提供的jar包 ...
- Spring的JDBC框架概述
以下内容引用自http://wiki.jikexueyuan.com/project/spring/jdbc-framework.html: 在使用普通的JDBC操作数据库时,就会很麻烦的写很多不必要 ...
- JDBC的概述和简单使用
1. 概念 JDBC是 Java DataBase Connectivity 的简写,翻译过来就是 Java 操作数据库. 目的是使用统一的Java代码操作所有关系型数据库. JDBC实际是定义了一套 ...
- jdbc 和oracle数据库 建立连接
package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException; ...
- 通过 JDBC 驱动程序使用大容量复制
Microsoft SQL Server 包含一个名为 bcp 的受欢迎的命令行实用工具,以便将较大文件快速大容量复制到 SQL Server 数据库的表或视图中. SQLServerBulkCopy ...
- JAVA采用JDBC连接操作数据库详解
JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...
- 【JDBC 笔记】
JDBC 笔记 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 对应pdf版:https://download.csdn.net/download/qq_22430159/10754554 没有积分 ...
随机推荐
- STM32—DMA存储器到外设
DMA目录 DMA简介 DMA框图 DMA传输数据分析 1.传输的方向 2.传输的数量 3.传输的模式 代码部分 DMA初始化结构体 USART配置函数 DMA配置函数 主函数 DMA简介 DMA(D ...
- SpringSession(redis)
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- 最简 jenkins-agent 镜像
jenkins-agent 老版本叫 jenkins-slave,利用K8S集群集成 JENKINS,可以更好的利用系统资源,扩展更方便.如果构建频繁 jenkins-agent iamge 比较大, ...
- [转]C# 互操作性入门系列(四):在C# 中调用COM组件
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- java线程池 面试题(精简)
什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理. 如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线 ...
- C#与.NET、CLR、CLI是什么关系?什么是.NET框架
1.C#与.NET.CLR.CLI是什么关系?什么是.NET框架? 这个问题好专业啊!一句话两句话还真不好说清.您听说过C++中有个COM的概念吧?您听说过JAVA里的虚拟机吧?CLR(公共 ...
- 怎样在Qt中建立使用动态链接库
参考网址: https://blog.csdn.net/q496713258/article/details/6990837 qt 的学习网址: http://c.biancheng.net/view ...
- [SWMM]模型子汇水区划分的几种方法
子汇水区的划分是SWMM模型建模的主要步骤之一,划分的好坏对结果精度有比较大的影响.概括来讲,子汇水区的划分有以下几种思路: (1)根据管网走向.建筑物和街道分布,直接人工划分子汇水区.这个方法适用于 ...
- IO流(File类--递归--过滤器--IO字节流--IO字符流--Properties集合--缓冲流--转换流--序列化流--打印流)
一.File类 1.1概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.1.1相对路径与绝对路径 相对路径从盘符开始的路径,这是一个完整 ...
- BufferedReader 和BufferedWriter
BufferedWriter: private void test(String content,String destPath) throws IOException { BufferedReade ...