JDBC开发前准备
使用文本编辑器开发
先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath
当中
#"."表示先从当前路径下加载类,如果没有再从指定路径加载
classpath=.;D:\course\06-JDBC\resources\MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar
使用IDEA开发
新建一个空工程Project
,在当前工程下新建一个模块Module
,然后为当前模块添加连接MySQL所需要的jar包
第一种添加方式
: Open Moduel seting(模块设置) --> Libraries -> + --> java第二种添加方式
: 在当前模块中创建一个文件夹如libs
,将mysql.jar
拷贝到该目录下,点击add to project
加入到当前模块中
jar包路径
mysql8和mysql5
的包路径不同
mysql5
:com.mysql.jdbc.Drivermysql8
:com.mysql.cj.jdbc.Driver
数据库的url分析(本质socket连接)
MySQL8的URL
: jdbc:mysql://localhost:3306/dbms?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
将项目部署到linux上时要使用useSSL=false
: MySQL5.7之后的版本必须要加上fasle,MySQL5.7以及之前的版本默认就为false不用进行添加
Oracle的URL
:jdbc:oracle:thin:@localhost:1521:orcl
参数 | 作用 |
---|---|
jdbc:mysql:// | 规定好的表示协议,通过jdbc的方式连接mysql |
localhost | mysql服务所在计算机的ip地址 , localhost和127.0.0.1都是本机IP地址 |
3306 | 表示mysql数据库端口号 |
dbms | 连接到mysql服务中的具体的某个数据库实例名 |
serverTimezone | MySQL8.0以上添加时区, Asia/Shanghai(上海时区),GMT+8(中国时区) |
characterEncoding | 处理字符的解码和编码的格式(若项目的字符集和MySQL数据库字符集为同一字符集则url可以不加此参数) |
useSSL | 是否使用安全套接字协议(true表示一般通过证书或者令牌进行安全验证, false表示通过账号密码进行连接) |
模拟JDBC的原理
概述
Java DataBase Connectivity(Java语言连接数据库)
是SUN公司制定的一套接口,该接口在java.sql.*
包下
面向接口编程(多态)
: 面向接口调用(底层还是接口写实现类),可以降低程序的耦合度提高程序的扩展力
因为各种数据库的底层实现原理
都不一样,所以SUN制定了一套JDBC接口
模拟JDBC本质
定义JDBC接口
及其实现类MySQL和Oracle
//SUN公司负责制定这套JDBC接口
public interface JDBC{
//连接数据库的方法
void getConnection();
}
//MySQL的数据库厂家负责编写JDBC接口的实现类(mysql驱动)
public class MySQL implements JDBC{
public void getConnection(){
// 具体这里的代码怎么写,对于我们Java程序员来说没关系
// 这段代码涉及到mysql底层数据库的实现原理。
System.out.println("连接MYSQL数据库成功!");
}
}
//Oracle的数据库厂家负责编写JDBC接口的实现类(oracle驱动)
public class Oracle implements JDBC{
public void getConnection(){
System.out.println("连接Oracle数据库成功!");
}
}
Java程序员不需要关心具体是哪个品牌的数据库,只需要面向JDBC接口写代码
import java.util.*;
public class JavaProgrammer{
public static void main(String[] args) throws Exception{
// JDBC jdbc = new MySQL();
// JDBC jdbc = new Oracle();
// 创建对象可以通过反射机制
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String className = bundle.getString("className");
Class c = Class.forName(className);
JDBC jdbc = (JDBC)c.newInstance();
// 面向接口调用方法不需要修改代码
jdbc.getConnection();
}
}