JDBC01-概述、快速入门、创建数据库连接的方式

1. JDBC 概述

1.1 基本介绍

JDBC01-概述、快速入门、创建数据库连接的方式_第1张图片

1.2 模拟 JDBC

JdbcInterface:统一规范

package com.hspedu.jdbc.myjdbc;
/**
* @version 1.0
* 我们规定的 jdbc 接口(方法)
*/
public interface JdbcInterface {
	//连接
	public Object getConnection() ;
	//crud
	public void crud();
	//关闭连接
	public void close();
}

MysqlJdbcImpl:mysql厂商的自我实现

package com.hspedu.jdbc.myjdbc;
/**
* @version 1.0
* mysql 数据库实现了 jdbc 接口 [模拟] 【mysql 厂商开发】
*/
public class MysqlJdbcImpl implements JdbcInterface{
	@Override
	public Object getConnection() {
		System.out.println("得到 mysql 的连接");
		return null;
	}
	@Override
	public void crud() {
		System.out.println("完成 mysql 增删改查");
	}
	@Override
	public void close() {
		System.out.println("关闭 mysql 的连接");
	}
}

OracleJdbcImpl:Oracle厂商的自我实现

package com.hspedu.jdbc.myjdbc;
/**
* @version 1.0
* 模拟 oracle 数据库实现 jdbc
*/
public class OracleJdbcImpl implements JdbcInterface {
	@Override
	public Object getConnection() {
		System.out.println("得到 oracle 的连接 升级");
		return null;
	}
	@Override
	public void crud() {
		System.out.println("完成 对 oracle 的增删改查");
	}
	@Override
	public void close() {
		System.out.println("关闭 oracle 的连接");
	}
}

测试类:

package com.hspedu.jdbc.myjdbc;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import java.util.Scanner;


public class TestJDBC {
	public static void main(String[] args) throws Exception {
		//完成对 mysql 的操作
		JdbcInterface jdbcInterface = new MysqlJdbcImpl();
		jdbcInterface.getConnection(); //通过接口来调用实现类[动态绑定]
		jdbcInterface.crud();
		jdbcInterface.close();
		
		//完成对 oracle 的操作
		System.out.println("==============================");
		jdbcInterface = new OracleJdbcImpl();
		jdbcInterface.getConnection(); //通过接口来调用实现类[动态绑定]
		jdbcInterface.crud();
		jdbcInterface.close();
	}
}

1.3 JDBC 带来的好处

JDBC01-概述、快速入门、创建数据库连接的方式_第2张图片

1.4 JDBC API

JDBC01-概述、快速入门、创建数据库连接的方式_第3张图片

2. JDBC 快速入门

2.1 JDBC 程序编写步骤

JDBC01-概述、快速入门、创建数据库连接的方式_第4张图片

2.2 JDBC 第一个程序

JDBC01-概述、快速入门、创建数据库连接的方式_第5张图片

-- 先创建测试表
create table actor
(id int primary key auto_increment,
name varchar(32) not null default '',
sex char(1) not null default '女',
borndate datetime,
phone varchar(12));

Jdbc01.java
JDBC01-概述、快速入门、创建数据库连接的方式_第6张图片

package com.hspedu.jdbc;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
* 这是第一个 Jdbc 程序,完成简单的操作
*/
public class Jdbc01 {
	public static void main(String[] args) throws SQLException {
		//前置工作: 在项目下创建一个文件夹比如 libs
		// 将 mysql.jar 拷贝到该目录下,点击 add to project ..加入到项目中
		//1. 注册驱动
		Driver driver = new Driver(); //创建 driver 对象
		
		//2. 得到连接
		// 解读
		//(1) jdbc:mysql:// 规定好表示协议,通过 jdbc 的方式连接 mysql
		//(2) localhost 主机,可以是 ip 地址
		//(3) 3306 表示 mysql 监听的端口
		//(4) hsp_db02 连接到 mysql dbms 的哪个数据库
		//(5) mysql 的连接本质就是前面学过的 socket 连接
		String url = "jdbc:mysql://localhost:3306/hsp_db02";
		
		//将 用户名和密码放入到 Properties 对象
		Properties properties = new Properties();
		//说明 user 和 password 是规定好,后面的值根据实际情况写
		properties.setProperty("user", "root");// 用户
		properties.setProperty("password", "hsp"); //密码
		
		Connection connect = driver.connect(url, properties);
		
		//3. 执行 sql
		//String sql = "insert into actor values(null, '刘德华', '男', '1970-11-11', '110')";
		//String sql = "update actor set name='周星驰' where id = 1";
		String sql = "delete from actor where id = 1";
		//statement 用于执行静态 SQL 语句并返回其生成的结果的对象
		Statement statement = connect.createStatement();
		int rows = statement.executeUpdate(sql); // 如果是 dml 语句,返回的就是影响行数
		System.out.println(rows > 0 ? "成功" : "失败");
		
		//4. 关闭连接资源
		//请关闭流,否则将来造成大量连接,而mysql的连接是有上限的
		statement.close();
		connect.close();
	}
}

3. 获取数据库连接 5 种方式

3.1 方式 1

JDBC01-概述、快速入门、创建数据库连接的方式_第7张图片

//方式 1 
@Test
public void connect01() throws SQLException {
	Driver driver = new Driver(); //创建 driver 对象
	String url = "jdbc:mysql://localhost:3306/hsp_db02";
	
	//将 用户名和密码放入到 Properties 对象
	Properties properties = new Properties();
	
	//说明 user 和 password 是规定好,后面的值根据实际情况写
	properties.setProperty("user", "root");// 用户
	properties.setProperty("password", "hsp"); //密码
	Connection connect = driver.connect(url, properties);
	System.out.println(connect);
}

3.2 方式 2

JDBC01-概述、快速入门、创建数据库连接的方式_第8张图片

//方式 2
@Test
public void connect02() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
	// 说明:使用反射机制,将来可以将类的信息写入配置文件中,
	//不需要更改源代码,灵活!
	//使用反射加载 Driver 类 , 动态加载,更加的灵活,减少依赖性
	Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
	Driver driver = (Driver)aClass.newInstance();
	String url = "jdbc:mysql://localhost:3306/hsp_db02";
	
	//将 用户名和密码放入到 Properties 对象
	Properties properties = new Properties();
	
	//说明 user 和 password 是规定好,后面的值根据实际情况写
	properties.setProperty("user", "root");// 用户
	properties.setProperty("password", "hsp"); //密码
	Connection connect = driver.connect(url, properties);
	System.out.println("方式 2=" + connect);
}

3.3 方式 3

JDBC01-概述、快速入门、创建数据库连接的方式_第9张图片

//方式 3 使用 DriverManager 替代 driver 进行统一管理
// 该方式主要是利用DriverManager提供的getConnection方法
// 该方法可以直接填入String类型的参数,避免了将配置信息写入Properties文件
@Test
public void connect03() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException {
	//使用反射加载 Driver
	Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
	Driver driver = (Driver) aClass.newInstance();
	
	//创建 url 和 user 和 password
	String url = "jdbc:mysql://localhost:3306/hsp_db02";
	String user = "root";
	String password = "hsp";
	DriverManager.registerDriver(driver);//注册 Driver 驱动
	
	//可以直接填入用户名和密码
	Connection connection = DriverManager.getConnection(url, user, password);
	System.out.println("第三种方式=" + connection);
}

3.4 方式 4

JDBC01-概述、快速入门、创建数据库连接的方式_第10张图片
JDBC01-概述、快速入门、创建数据库连接的方式_第11张图片

Class.forName可以省略不写,原因如上图,但还是建议写上

//方式 4: 使用 Class.forName 自动完成注册驱动,简化代码
//相比于方式三简化了注册驱动的步骤:
//DriverManager.registerDriver(driver)
//这种方式获取连接是使用的最多,推荐使用
@Test
public void connect04() throws ClassNotFoundException, SQLException {
	//使用反射加载了 Driver 类
	//在加载 Driver 类时,完成注册
	/*
	源码: 
	1. 静态代码块,在类加载时,会执行一次. 
	2. DriverManager.registerDriver(new Driver());
	3. 因此注册 driver 的工作已经完成
	static {
		try {
			DriverManager.registerDriver(new Driver());
		} catch (SQLException var1) {
			throw new RuntimeException("Can't register driver!");
		}
	}
	*/
	Class.forName("com.mysql.jdbc.Driver");
	//创建 url 和 user 和 password
	String url = "jdbc:mysql://localhost:3306/hsp_db02";
	String user = "root";
	String password = "hsp";
	Connection connection = DriverManager.getConnection(url, user, password);
	System.out.println("第 4 种方式~ " + connection);
}

自我理解:
Driver和DriverManager可以理解为节点流和处理流的区别

3.5 方式 5

JDBC01-概述、快速入门、创建数据库连接的方式_第12张图片

//方式 5 , 在方式 4 的基础上改进,增加配置文件,让连接 mysql 更加灵活
@Test
public void connect05() throws IOException, ClassNotFoundException, SQLException {
	//通过 Properties 对象获取配置文件的信息
	Properties properties = new Properties();
	properties.load(new FileInputStream("src\\mysql.properties"));
	
	//获取相关的值
	String user = properties.getProperty("user");
	String password = properties.getProperty("password");
	String driver = properties.getProperty("driver");
	String url = properties.getProperty("url");
	
	Class.forName(driver);//建议写上
	Connection connection = DriverManager.getConnection(url, user, password);
	System.out.println("方式 5 " + connection);
}

3.6 练习

JDBC01-概述、快速入门、创建数据库连接的方式_第13张图片

Properties properties = new Properties();
 File file = new File("./src/com/jdbc_start/jdbc.properties");
 if (!file.exists()){
     System.out.println("文件不存在!");
     System.exit(0);
 }
 properties.load(new FileInputStream(file));
 String url = (String) properties.get("url");
 String driver = (String) properties.get("driver");
 String user = (String) properties.get("user");
 String password = (String) properties.get("password");
 Class<?> cls = Class.forName(driver);
 Connection connection = DriverManager.getConnection(url, user, password);
 Statement statement = connection.createStatement();
//        String sql = "create table news(id int primary key auto_increment,content varchar(32) not null default ' ') charset utf8 collate utf8_bin engine innodb";
//        String sql = "drop table news";
//        String sql = "insert into news (content) values ('佛山新闻'),('江西新闻')";
//        String sql = "update news set content = '深圳新闻' where id = 1";
 String sql = "delete from news where id = 3";
 int rows = statement.executeUpdate(sql);
 System.out.println(rows>0?"成功":"失败");

你可能感兴趣的:(数据库,数据库,java,mysql)