一、JDBC程序编写步骤
在maven工程的pom.xml文件添加相关依赖
<dependencies>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
</dependencies>
二、连接方式一
在idea中的代码Driver类按Ctrl + H查看实现类
package com.wu.web.jdbc;
import org.junit.Test;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;
public class ConnectionTest {
@Test
public void testConnection1() throws SQLException {
//获取Driver的实现类对象
Driver driver = new com.mysql.cj.jdbc.Driver();
//jdbc : mysql:协议
//localhost : ip地址
// 3306 : 默认mysql的端口号
// book : book数据库
String url = "jdbc:mysql://112.126.91.232:3306/book";
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","root");
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
}
执行代码后没有报错,出现了com.mysql.cj.jdbc.ConnectionImpl@6dc17b83就证明连接正常,ConnectionImpl是Connection接口的实现类
三、连接方式二(迭代一)
public class ConnectionTest {
@Test
public void testConnection1() throws Exception {
//通过反射的方式获取Driver实现类
//使用反射通用性更高,只要在Class.forName()放入驱动实现类
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver)clazz.newInstance();
//jdbc : mysql:协议
//localhost : ip地址
// 3306 : 默认mysql的端口号
// book : book数据库
String url = "jdbc:mysql://112.126.91.232:3306/book";
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","root");
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
}
四、连接方式三(迭代二)
public class ConnectionTest {
@Test
public void testConnection1() throws Exception {
//DriverManager是sun公司提供的类,它是管理jdbc驱动的集合的基础服务
//使用DriverManager替换Driver
//获取Driver的实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver)clazz.newInstance();
//提供另外三个的基本信息
String url = "jdbc:mysql://112.126.91.232:3306/book";
String user = "root";
String password = "root";
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
}
五、连接方式四(迭代三)
public class ConnectionTest {
@Test
public void testConnection1() throws Exception {
//1.提供另外三个的基本信息
String url = "jdbc:mysql://112.126.91.232:3306/book";
String user = "root";
String password = "root";
//2.获取Driver实现类对象,注册驱动由mysql自动做了
Class.forName("com.mysql.cj.jdbc.Driver");
//3.获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
}
类加载的时候Driver类的静态代码块中注册了驱动
public class ConnectionTest {
@Test
public void testConnection1() throws Exception {
//1.提供另外三个的基本信息
String url = "jdbc:mysql://112.126.91.232:3306/book";
String user = "root";
String password = "root";
//2.获取Driver实现类对象
//Class.forName("com.mysql.cj.jdbc.Driver");
//3.获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
}
Class.forName(“com.mysql.cj.jdbc.Driver”)类加载也可以省略,也能成功加载,因为在mysql驱动中进行了Driver实例化
Class.forName(“com.mysql.cj.jdbc.Driver”)还是不能去掉,因为oracle这样做会报错,还是要指定要加载什么驱动类
六、连接方式五(final版)
通过读取配置文件获取需要的基本信息
创建jdbc.properties文件
username=root
password=root
url=jdbc:mysql://112.126.91.232:3306/book
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=5
maxActive=10
public class ConnectionTest {
@Test
public void testConnection1() throws Exception {
//1.读取配置文件的4个基本信息
//通过系统类的加载器获取配置文件,默认路径是当前类所在路径,如果是idea创建的web工程,就放到resources文件夹下
InputStream st = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pt = new Properties();
pt.load(st);
String username = pt.getProperty("username");
String password = pt.getProperty("password");
String url = pt.getProperty("url");
String driverClass = pt.getProperty("driverClassName");
//2.加载驱动
Class.forName(driverClass);
//3.获取连接
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println(connection);
}
}
此种方式的好处?
1.实现了数据与代码的分离。实现了解耦
2.如果需要修改配置文件信息,可以避免程序重新打包。