持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多
数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘
上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
大文件一般用数据库存储,小文件可以是文件存储。
JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统。
JAVA程序连接数据库情况:
在这里对插入图片描述
1.加载驱动:导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
(1)复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
(2)右键–>Build path ->add to Build path
2.注册驱动:Driver driver = new com.mysql.jdbc.Driver();(用的mysql的驱动去连接mysql数据库)
3.获取数据库连接对象 Connection(就是连接上数据库,连接对象不为空就是连接上了)
4.定义sql语句
5.获取执行sql语句的对象 Statement(对数据库进行增删改查)
6.查操作就会返回结果集,ResultSet对象(万事万物皆对象。增删改就是更新)
7.关闭所有资源
java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。(就是说所有商家的驱动都按照这个接口去实现)
package com.atguigu.connection;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
public class ConnectionTest {
//方式一
@Test
public void testConnection1() throws SQLException {
//获取Driver实现类对象,由具体的数据库厂商提供
Driver driver = new com.mysql.jdbc.Driver();//实现的了jdbc的标准,加载mysql的驱动。
//jdbc:mysql:协议
//localhost IP地址
//:3306 默认mysql的端口号
//:test 数据库
String url = "jdbc:mysql://localhost:3306/test"; //连接的哪一个数据库,路径
//将用户名和密码封装在Properties中
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password","root");
Connection conn = driver.connect(url,info);//返回的就是一个Connection一个连接对象。
System.out.println(conn);//连接对象为空表示已经连上test数据库。
}
}
最开始获取什么类型的数据库连接我们可能不知道,这里使用反射实现动态获取。
运行需要把方式一中的包导入。
//方式二:对方式一的迭代:在如下的程序中不出现第三方的api,使得程序具有更好的可移植性
@Test
public void testConnection2() throws Exception {
//1.获取Driver实现类对象,使用反射创建Class实例
Class clazz = Class.forName("com.mysql.jdbc.Driver()");
Driver driver = (Driver) clazz.newInstance();
//2提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/test";
//3将用户名和密码封装在Properties中,提供连接需要的用户名和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password","root");
//4.获取连接
Connection conn = driver.connect(url,info);//返回一个连接对象
System.out.println(conn);
}
使用DriverManager替换Driver
@Test
public void testConnection3() throws Exception {
//1.获取Driver实现类对象,使用反射
Class clazz = Class.forName("com.mysql.jdbc.Driver()");
Driver driver = (Driver) clazz.newInstance();
//2.提供另外三个连接的基本信息
String url ="jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
在方式三的基础上进行优化。可以只是加载驱动,不用显示的注册驱动了
@Test
public void testConnection4() throws Exception {
//1.提供另外三个连接的基本信息
String url ="jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
//2.获取Driver实现类对象,使用反射,静态代码块随着类的加载而执行
Class.forName("com.mysql.jdbc.Driver()"); //把mysql中的Driver类加载到内存中
//相较于方式三。可以省略如下操作
// Driver driver = (Driver) clazz.newInstance();
// //注册驱动
// DriverManager.registerDriver(driver); // mysql 自己实现了驱动注册,不需要我们去注册
//3获取连接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
静态代码块随着类的加载而执行(省略部分在类的加载的时候就已经被执行,所以不用再自己手动写一遍)。
将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接。(优化代码,增强代码健壮性)
1、在src下建立jdbc.properties文件。写入4个基本信息
user=root
password=root
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver
2、加载jdbc.properties文件,运行代码
//方式五(最终版)将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
public void getConnection5() throws Exception {
//1.读取配置文件的4个基本信息
//获取类的加载器
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
//加载这个文件
pros.load(is);
//取4个基本值
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//2.加载驱动
Class.forName(driverClass);
//3.获取连接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}