文章目录
1、JDBC 概述
1.1、基本介绍
1.2、模拟 JDBC
JdbcInterface.java
package jdbc.myjdbc;
/**
* 规定的 jdbc 接口(方法)
*/
public interface JdbcInterface {
// 连接
public Object getConnection();
// crud
public void crud();
// 关闭连接
public void close();
}
TestJDBC.java
package jdbc.myjdbc;
public class TestJDBC {
public static void main(String[] args) {
// 完成对 mysql 的操作
JdbcInterface jdbcInterface = new MysqlJdbcImpl();
jdbcInterface.getConnection(); // 通过接口来调用实现类[动态绑定]
jdbcInterface.crud();
jdbcInterface.close();
// 完成对 oracle 的操作
jdbcInterface = new OracleJdbcImpl();
jdbcInterface.getConnection(); // 通过接口来调用实现类[动态绑定]
jdbcInterface.crud();
jdbcInterface.close();
}
}
MysqlJdbcImpl.java
package jdbc.myjdbc;
/**
* 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.java
package jdbc.myjdbc;
/**
* 模拟 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 的连接");
}
}
1.3、JDBC 带来的好处
1.4、JDBC API
2、JDBC 快速入门
2.1、JDBC 程序编写步骤
2.2、安装驱动的步骤
如上步骤完成之后:
2.3、JDBC 第一个程序
创建数据表
2.4、代码实现
package 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) user_db 连接到 mysql dbms 的哪个数据库
// (5) mysql 的连接本质就是前面学过的 socket 连接
// (6) ?useUnicode=true&characterEncoding=UTF-8"; 添加这行可以解决中文乱码问题(插入的数据在数据库中显示问号)
String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
// 将 用户名和密码放入到 Properties 对象
Properties properties = new Properties();
// 说明 user 和 password 是规定好, 后面的值根据实际情况填写
properties.setProperty("user", "root"); // 用户
properties.setProperty("password", "root"); // 密码
Connection connect = driver.connect(url, properties);
// 3. 执行 sql
// 添加的sql
String sql = "insert into actor values(null, '刘德华', '男', '1970-11-11', '110')";
// 更新的sql
// String sql = "update actor set name='周星驰' where id = 1";
// 删除的sql
// 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. 关闭连接资源
statement.close();
connect.close();
}
}
2.5、获取数据库连接 5 种方式
2.5.1、方式 1
2.5.2、方式 2
2.5.3、方式 3
2.5.4、方式 4
2.5.5、方式 5
package jdbc;
import com.mysql.jdbc.Driver;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
* java 连接 mysql 的 5 中方式
*/
@SuppressWarnings({"all"})
public class JdbcConn {
// 方式 1
@Test
public void connect01() throws SQLException {
Driver driver = new Driver(); // 创建 driver 对象
String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
// 将 用户名和密码放入到 Properties 对象
Properties properties = new Properties();
// 说明 user 和 password 是规定好, 后面的值根据实际情况填写
properties.setProperty("user", "root"); // 用户
properties.setProperty("password", "root"); // 密码
Connection connect = driver.connect(url, properties);
System.out.println("方式1=" + connect); // 方式1=com.mysql.jdbc.JDBC4Connection@d6da883
}
// 方式 2
@Test
public void connect02() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
// 使用反射加载 Driver 类, 动态加载, 更加的灵活, 减少依赖性
Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
// 将 用户名和密码放入到 Properties 对象
Properties properties = new Properties();
// 说明 user 和 password 是规定好, 后面的值根据实际情况填写
properties.setProperty("user", "root"); // 用户
properties.setProperty("password", "root"); // 密码
Connection connect = driver.connect(url, properties);
System.out.println("方式2=" + connect); // 方式2=com.mysql.jdbc.JDBC4Connection@d6da883
}
// 方式 3 使用 DriverManager 替代 driver 进行统一管理
@Test
public void connect03() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
// 使用反射加载 Driver
Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
// 创建 url 和 user 和 password
String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
String user = "root";
String password = "root";
DriverManager.registerDriver(driver); // 注册 Driver 驱动成功
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("方式3=" + connection); // 方式3=com.mysql.jdbc.JDBC4Connection@45afc369
}
// 方式 4: 使用 Class.forName 自动完成注册驱动, 简化代码
// 这种方式获取连接是使用的最多, 推荐使用
@Test
public void connect04() throws ClassNotFoundException, InstantiationException, IllegalAccessException, 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<?> aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
// 创建 url 和 user 和 password
String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("方式4=" + connection); // 方式4=com.mysql.jdbc.JDBC4Connection@d6da883
}
// 方式 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); // 方式5=com.mysql.jdbc.JDBC4Connection@d6da883
}
}
mysql.properties