学习JDBC连接MySQL数据库时,遇到了配置属性文件的问题,这里简单的理解记录一下,关于JDBC不多加叙述:

代码

/**
 * 创建一个修改MySQL数据库的类
 * 这个类中用到了配置文件和反射机制
 */

package mypackage;

import com.mysql.jdbc.Driver;
import org.json.Property;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Properties;
//创建类
public class MYJDBC {
    public static void main(String[] args) throws Exception {
//        注册驱动器,在这之前需要在MySQL官网下载这个驱动程序并导入IDEA中
        Class.forName("com.mysql.cj.jdbc.Driver");
//        创建一个Properties对象,这个对象类似于map,采用键值对的方式存储数据
        Properties info=new Properties();
/**
 * 获得配置文件数据流,有反射机制的知识
 * MYJDBC.class获得MYJDBC的Class类对象
 * .getClassLoader()获得类对象的类加载器
 * .getResourceAsStream("config.properties");使用类加载器获得配置文件的输入流
 */
        InputStream input=MYJDBC.class.getClassLoader().getResourceAsStream("config.properties");
//       读取数据到Properties对象中
        info.load(input);
//        设置url,注意?serverTimezone=GMT%2B8"解决时区错误的问题
        String url="jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8";
//        创建连接对象
        Connection con = DriverManager.getConnection(url,info);
//        创建sql语句,id为1的身高被修改为170
        String sql="UPDATE hight SET tall=170 WHERE id=1;";
//        创建语句执行对象
        Statement statement = con.createStatement();
//        执行
        int count = statement.executeUpdate(sql);
        System.out.println(count);
//        关闭资源,释放
        statement.close();
        con.close();
    }
}

结果

我们发现id为1的身高被修改为了170,之前是180,程序执行成功

python 设置本地库位置_类对象


因为程序中用到了配置文件,程序上面的注释有一部分说明,这里再解释一下:

什么是配置文件

我的理解是,程序中有一些变量,我们直接编写程序的时候是直接把程序写死了,要修改变量的话就得去找变量进行修改,如果代码非常得多,非常得复杂,我们修改变量得值就很麻烦,此时我们就可以设置配置文件,然后在配置文件中设置好值,并且修改得时候可以简单直接得修改配置文件就行了,不用去修改源代码程序。

怎么设置配置文件

一般情况下,配置文件设置在与程序文件相同的src下。

python 设置本地库位置_类对象_02


python 设置本地库位置_类加载器_03


python 设置本地库位置_类对象_04

怎么获取配置文件中得内容

这里需要用到反射机制,那么什么是反射机制呢?又得先说一下java代码的三个过程,如下图:

python 设置本地库位置_配置文件_05


第一个阶段:我们编写一个程序,是.java程序,然后经过编译为.class文件,就是字节码文件,这里是第一个阶段,注意这里的class是小写c;

第二个阶段:第一个阶段时,程序并没有加载到内存,只是在硬盘上,因此是不能创建对象的,创建对象是第三个过程,要把第一个阶段的字节码文件加载到内存中,就要使用类加载器(JVM实现),然后加载到第二个阶段,这个阶段中的文件都是Class类对象(注意这里的C大写),我的理解是类的类对象,因为一切皆为对象,这个里的Class就是管理这些类的,把这些类抽象为成员变量,成员方法,构造方法等,然后我们就可以先创建一个类对象,找到成员变量,成员方法,构造方法等等;另外还可以根据类对象获得类加载器,根据类加载器获得此路径下的其他文件。

第三个阶段:我们熟悉的new创建对象并且运行的阶段;

好了言归正传,我们怎获得这个配置文件的内容呢?简单的说就是先根据当前类创建类对象,根据类对象获得类加载器,再通过类加载器去找到这个类所在路径下的配置文件,具体的代码如下,不多说:

/**
 * 获得配置文件数据流,有反射机制的知识
 * MYJDBC.class获得MYJDBC的Class类对象
 * .getClassLoader()获得类对象的类加载器
 * .getResourceAsStream("config.properties");使用类加载器获得配置文件的输入流
 */
        InputStream input=MYJDBC.class.getClassLoader().getResourceAsStream("config.properties");
//       读取数据到Properties对象中
        info.load(input);

以上获得是直接就是键值对的形式,也就是说获取的就是
user=root
password=123456

如果我们只想要值,那么可以:

info.load(input);
System.out.println(info.getProperty("user"));
System.out.println(info.getProperty("password"));

最后再补充一点,在这个例子中,配置文件还可以增加此例中不需要的键值对,但是程序运行时不会出现错误,因为这里程序会自动去匹配需要的user,password,这两个参数名和我们在配置文件的键是一样的。

python 设置本地库位置_类加载器_06

PS:MySQL驱动下载和导入

下载地址:https://dev.mysql.com/downloads/connector/j/

python 设置本地库位置_类对象_07


python 设置本地库位置_配置文件_08


python 设置本地库位置_配置文件_09


python 设置本地库位置_类对象_10


python 设置本地库位置_python 设置本地库位置_11


python 设置本地库位置_python 设置本地库位置_12


python 设置本地库位置_python 设置本地库位置_13


然后就可以使用了,建一个文件夹只是方便管理,你可以不建文件夹直接复制到项目里,但是一定要有Add as Library操作