获取数据库连接的方式五
这里的方式五又是方式四的迭代,方式五将建立数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式获取到四个基本信息,然后通过四个基本信息建立和数据库的连接
- 那么与数据库连接需要的4个基本信息分别是什么?
- 驱动类类名
- 驱动类类名在配置文件中的键我们一般创建为: driverClass
- 数据库URL
- 数据库URL在配置文件中的键我们一般创建为: url
- 用户名
- 用户名在配置文件中的键我们一般创建为user
- 密码
- 密码在配置文件中的键我们一般创建为password
- 驱动类类名
我们给出配置文件jdbc.properties如下:
user=root
password=mysql
url=jdbc:mysql://localhost:3306/school?serverTimezone=Asia/Shanghai
driverClass=com.mysql.cj.jdbc.Driver
- 注意: 我们在配置文件中,在=(等号)两边一定不要有空格,在配置文件中有空格就会引起歧义:
- eg:如果在配置文件中有password= mysql,那么这个时候到底password的值是空格+mysql还是直接是mysql? —> 为了解决出现这种歧义的可能,所以我们规定在配置文件中要求在=(等号)的两边不能有空格
- 注意: 我们推荐将配置文件创建在当前的src之下,不要直接创建在当前项目(工程)下,因为后面我们在讲到web前端的时候我们会讲到在将配置文件部署到Tomcat服务器上的时候对应的创建在当前工程下的配置文件会自动缺失,也就是创建在当前工程下的配置文件是部署不到Tomcat服务器上的,但是创建在src下的配置文件在部署到Tomcat服务器上的时候不会缺失 —> 所以我们在创建配置文件的时候最好是将配置文件创建在当前项目的src之下
我们给出具体的使用方式五获取数据库连接的代码:
package jdbc.获取数据库连接的方式五;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class Demo {
//这里我们只是进行了一个测试,所以就将异常进行了抛出,但是在实际的编程中这种情况下应该是要使用try --- catch --- finally来解决这个异常
public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
/*
读取配置文件中的四个基本信息
注意: 因为前面我们创建配置文件的时候是创建到了当前的项目的src之下,所以我们建议加载这个配置文件的时候是通过使用类加载器的方式来加载,
因为使用类加载器加载配置文件默认是在当期项目的src之下去找,如果和以前一样我们使用I/O流的方式来加载这个配置文件,那么默认是从当前的
工程下去找的
这里我们就选择了使用类加载器的方式来加载这个类,这里我们通过本类类名.class获得到了一个运行时类的对象,然后我们在通过这个运行时类的对象
调用了getClassLoader()方法就会获得这个加载这个运行时类的类加载器(加载自定义类的类加载器是系统类加载器),通过这个类加载器我们再通过
调用系统类加载器中的getResourceAsStream()方法来以流的形式加载这个配置文件
*/
//或者这里也可以替换为 : InputStream is = ClassLoader.getSystemResourceAsStream("jdbc.properties");
InputStream is = Connection.class.getClassLoader().getResourceAsStream("jdbc.properties");
/*
创建一个Properties类的对象
在Java中一个Properties类的对象就表示一个配置文件,后面我们就要将配置文件中的信息导入到这个对象中,那么通过这个对象就可以获得
这个对象对应的配置文件中的信息
*/
Properties pros = new Properties();
/*
调用Properties类的load()方法,将参数配置文件中的信息导入到这个Properties类的对象中
*/
pros.load(is);
/*
通过Properties类的对象来获取配置文件中的信息
*/
String driverClass = pros.getProperty("driverClass");
String url = pros.getProperty("url");
String user = pros.getProperty("user");
String password = pros.getProperty("password");
/*
加载驱动类到内存中
*/
Class.forName(driverClass);
/*
获取连接
*/
Connection conn = DriverManager.getConnection(url,user,password);
//输出验证是否连接成功
System.out.println(conn);
}
}
补充:
Properties是java中用来表示配置文件的API,Properties类是Hashtable类的子类
- 我们新创建的一个Properties类的对象表示一个空的配置文件,如果要这个Properties类的对象表示一个具体的配置文件,那么我们就要使用这个Properties类的对象调用load(InputStream i)方法传入一个输入流,要求这个输入流的节点是具体的某个配置文件