学习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,程序执行成功
因为程序中用到了配置文件,程序上面的注释有一部分说明,这里再解释一下:
什么是配置文件
我的理解是,程序中有一些变量,我们直接编写程序的时候是直接把程序写死了,要修改变量的话就得去找变量进行修改,如果代码非常得多,非常得复杂,我们修改变量得值就很麻烦,此时我们就可以设置配置文件,然后在配置文件中设置好值,并且修改得时候可以简单直接得修改配置文件就行了,不用去修改源代码程序。
怎么设置配置文件
一般情况下,配置文件设置在与程序文件相同的src下。
怎么获取配置文件中得内容
这里需要用到反射机制,那么什么是反射机制呢?又得先说一下java代码的三个过程,如下图:
第一个阶段:我们编写一个程序,是.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,这两个参数名和我们在配置文件的键是一样的。
PS:MySQL驱动下载和导入
下载地址:https://dev.mysql.com/downloads/connector/j/
然后就可以使用了,建一个文件夹只是方便管理,你可以不建文件夹直接复制到项目里,但是一定要有Add as Library操作