You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从属性文件读取dbURL、用户名及密码的JDBC程序?

JDBC从属性文件读取数据库连接信息的代码解析与完善

我来帮你把这段JDBC代码完善好,并且一步步解析清楚怎么从属性文件读取数据库连接信息,让代码更灵活易维护~

第一步:先准备属性文件

首先我们需要创建一个db.properties文件,把数据库连接的敏感信息都放在这里,和代码分离。文件内容如下:

# MySQL 5.x驱动类
driverClass=com.mysql.jdbc.Driver
# MySQL 8.x驱动类请改成:com.mysql.cj.jdbc.Driver
dbURL=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
user=root
password=your_database_password

第二步:完善后的完整Java代码

下面是调整后的完整代码,解决了从属性文件读取参数的问题,同时优化了资源管理:

package com.j2ee.jdbc.firstProgram;

import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBC_Properties {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        Properties props = new Properties();

        try {
            // 加载外部属性文件
            props.load(new FileReader("db.properties"));

            // 加载JDBC驱动类(从属性文件读取,适配不同版本MySQL)
            Class.forName(props.getProperty("driverClass"));

            // 从属性文件提取连接参数
            String dbURL = props.getProperty("dbURL");
            String user = props.getProperty("user");
            String password = props.getProperty("password");

            // 建立数据库连接
            con = DriverManager.getConnection(dbURL, user, password);
            System.out.println("✅ 数据库连接成功!");

            // 创建Statement执行SQL查询
            stmt = con.createStatement();
            String sql = "SELECT * FROM your_table_name"; // 替换成你的表名
            rs = stmt.executeQuery(sql);

            // 遍历结果集并输出数据
            while (rs.next()) {
                // 这里根据你的表结构调整字段获取方式,示例取ID和名称
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.printf("ID: %d, 名称: %s%n", id, name);
            }

        } catch (Exception e) {
            // 捕获异常并打印栈信息,方便排查问题
            e.printStackTrace();
        } finally {
            // 必须在finally块关闭资源,避免资源泄漏,关闭顺序要从下到上
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (con != null) con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

关键代码部分解析

  • 属性文件加载:用Properties类的load()方法读取外部配置文件,这样修改数据库信息不用动代码,直接改配置文件就行,非常方便维护,还能避免把敏感密码硬编码在代码里。
  • 驱动加载优化:把驱动类名也放到属性文件中,这样切换MySQL 5.x和8.x版本时,只需要改配置文件里的driverClass值就行,不用修改代码。
  • 资源管理:在finally块中按ResultSet → Statement → Connection的顺序关闭资源,不管代码有没有抛出异常,都能确保数据库连接等资源被释放,防止资源泄漏。
  • 结果集处理:用字段名(比如rs.getInt("id"))代替索引获取数据,比用索引更直观,也避免表结构调整后索引失效的问题。

额外注意事项

  • 确保db.properties文件的路径正确,如果是Maven项目,建议把它放在src/main/resources目录下,读取时路径写成src/main/resources/db.properties或者用类加载器读取更稳妥。
  • MySQL 8.x版本必须添加serverTimezone=UTC时区参数,否则会抛出时区相关的异常。
  • 实际开发中推荐使用PreparedStatement代替Statement,它可以防止SQL注入,安全性更高,还能预编译SQL提升性能。

内容的提问来源于stack exchange,提问作者Santhosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:33:38