基于宋红康老师所讲JDBC所作笔记

1.JDBC概述

1.1 数据持久化

  • 持久化:将数据保持到可掉电式存储设备中以供之后使用。

    数据持久化意味着将内存中的数据保存到硬盘上加以固化,实现过程大多通过各种关系数据库完成。

主要应用:将内存中的数据存储在关系型数据库中(也可存储于磁盘文件、XML数据文件中)

1.2 Java中的数据存储技术

  1. JDBC直接访问数据库
  2. JDO(Java Data Object)技术
  3. 第三方O/R工具(Mybatis)

1.3 JDBC介绍

  • JDBC(Java Database Connectivity)独立于特定数据库管理系统,通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库
  1. JDBC为访问不同数据库提供了统一的途径,屏蔽了一些细节问题
  2. JDBC的目标是使Java程序员使用JDBC链接任何提供了JDBC驱动程序的数据库系统,使程序员无需对特定数据库系统特点有过多了解,简化加快开发过程。

1.4 JDBC体系结构

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

    1. 面向应用的API:Java API,抽象接口,供程序开发人员使用(链接数据库,执行SQL语句,获得结果)
    2. 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序

2.JDBC连接

2.1 Driver

2.1.1 Driver接口简介

  1. java.sql.Driver接口是所有JDBC驱动程序需要实现的接口,该接口提供给数据库厂商使用,不同数据库厂商提供不同实现。
  2. 程序中不需直接访问Driver接口实现类,由驱动程序管理器类调用这些类
    • MySQL:com.mysql.cj.jdbc.Driver(引入jar包为8.0版本)

2.1.2 加载与注册JDBC

2.2 URL(统一资源定位符)

  1. URL用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序从而建立到数据库的连接。
  2. URL由三部分组成 jdbc:子协议:子名称 String url = "jdbc:mysql://localhost:3306/user_db?serverTimezone=UTC";
    1. 协议 jdbc
    2. 子协议:mysql
    3. 一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的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

优势:

  1. 实现数据和代码的分离,降低程序耦合度
  2. 如果需要修改配置文件信息,可避免程序重新打包

JDBC-1(概述&建立)的更多相关文章

  1. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

  2. 【Java123】JDBC数据库连接池建立

    需求场景:多SQL任务多线程并行执行 解决方案:建立JDBC数据库连接池,将线程与连接一对一绑定 https://www.cnblogs.com/panxuejun/p/5920845.html ht ...

  3. JDBC连接数据库概述

    直接介绍JDBC连接数据库的流程及其原理 创建一个以JDBC连接数据库的程序,包含7个步骤 1.加载JDBC数据库驱动 在连接数据库之前,首先要加载想要连接的数据库的驱动,就是数据库厂商提供的jar包 ...

  4. Spring的JDBC框架概述

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/jdbc-framework.html: 在使用普通的JDBC操作数据库时,就会很麻烦的写很多不必要 ...

  5. JDBC的概述和简单使用

    1. 概念 JDBC是 Java DataBase Connectivity 的简写,翻译过来就是 Java 操作数据库. 目的是使用统一的Java代码操作所有关系型数据库. JDBC实际是定义了一套 ...

  6. jdbc 和oracle数据库 建立连接

    package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException; ...

  7. 通过 JDBC 驱动程序使用大容量复制

    Microsoft SQL Server 包含一个名为 bcp 的受欢迎的命令行实用工具,以便将较大文件快速大容量复制到 SQL Server 数据库的表或视图中. SQLServerBulkCopy ...

  8. JAVA采用JDBC连接操作数据库详解

    JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...

  9. 【JDBC 笔记】

    JDBC 笔记 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 对应pdf版:https://download.csdn.net/download/qq_22430159/10754554 没有积分 ...

随机推荐

  1. 题解 Defence

    传送门 发现最少次数只和最左,最右及中间最长的全0段有关 本来想启发式合并,结果发现直接线段树合并搭配一个类似山海经的方法就可以过了 yysy,线段树单次合并的具体复杂度并不是 \(O(logn)\) ...

  2. WPF 自己做一个颜色选择器

    程序开发过程中,经常会遇到需要支持动态配置主题颜色的问题,通常,一个程序会有多种不同的颜色风格主题供选 有时候,更细致一些的地方,会需要支持自己配置颜色,这样我们就需要一个颜色选择器啦,下面是我自己开 ...

  3. WPF 中的形状和基本绘图概述

    本主题概述如何使用 Shape 对象绘图. Shape 是一种允许您在屏幕中绘制形状的 UIElement 类型. 由于它们是 UI 元素,因此 Shape 对象可以在 Panel 元素和大多数控件中 ...

  4. Qt 中的属性系统(Property System)

    21 人赞同了该文章 本节内容主要讲解我对 Qt 属性系统的理解.官方文档参考 The Property System. 如何理解"属性系统"这个概念? 一般我们说一个类有什么属性 ...

  5. 常见递归&非递归实现

    void my_strcpy(char *to,const char *from) { if('\0' == *from){ *to = '\0'; return ; } *to++ = *from+ ...

  6. (2)hadoop之-----配置免密码登录

    ssh-keygen -t rsa 然后一路回车 在家目录下会生成 .ssh 目录           ls -la   查看 进入   .ssh            cd .ssh cp ~/.s ...

  7. linux(3)--------SSH工具的安装使用

    0.一般安装服务端的Linux ssh是默认安装的可以运行ssh localhost测试一下是否可以链接 1.SSH是什么 1)ssh:Secure Shell  安全外壳协议 2)建立在应用层基础上 ...

  8. Nginx location 和 proxy_pass路径配置详解

    目录 一.Nginx location 基本配置 1.1.Nginx 配置文件 1.2 .Python 脚本 二.测试 2.1.测试 location 末尾存在 / 和 proxy_pass末尾存在 ...

  9. Electron团队为什么要干掉remote模块

    Electron团队提供remote模块给开发者, 主要目的是为了简化渲染进程和主进程互访的难度, 这个目的却是达到了. 但也带来了很多问题, 归纳起来主要分为以下四点: 第一:它很慢 通过remot ...

  10. MySQL-存储引擎-MERGE

    MERGE存储引擎是一组Myisam表的组合,这些Myisam表必须结构完全相同,MERGE表本身并没有数据,对MERGE类型的表可以进行查询.更新.删除操作,这些操作实际上是对内部的Myisam表进 ...