jdbc基础 (二) 通过properties配置文件连接数据库

上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用。

因为jdbc对数据库的驱动加载、连接获取、释放资源的代码都是相同的,为了提高代码的复用性,我们可以写一个工具类,将数据库驱动加载、获取连接、资源释放的代码封装起来。同时,为了提高工具类的灵活性,可以将数据库的驱动、url、用户名、密码等信息以键值对的形式存放在properties文件中,工具类初始化时从配置文件中读取所要连接数据库的信息。当需要更改连接的数据库时,只需要更改配置文件即可,而不必改写工具类的代码。

下面是工具类代码的实现:

package com.cream.ice.jdbc;

import java.io.IOException;
import java.io.InputStream;
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 JdbcUtils {

    private static String driverName;
    private static String url;
    private static String user;
    private static String password;

    /*
     * 静态代码块,类初始化时加载数据库驱动
     */
    static {
        try {
            // 加载dbinfo.properties配置文件
            InputStream in = JdbcUtils.class.getClassLoader()
                    .getResourceAsStream("dbinfo.properties");
            Properties properties = new Properties();
            properties.load(in);

            // 获取驱动名称、url、用户名以及密码
            driverName = properties.getProperty("driverName");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");

            // 加载驱动
            Class.forName(driverName);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /*
     * 获取连接
     */
    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url, user, password);

    }

    /*
     * 释放资源
     */
    public static void releaseResources(ResultSet resultSet,
            Statement statement, Connection connection) {

        try {
            if (resultSet != null)
                resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            resultSet = null;
            try {
                if (statement != null)
                    statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                statement = null;
                try {
                    if (connection != null)
                        connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    connection = null;
                }
            }
        }

    }

}

这里dbinfo.properties文件中信息如下,读者可自行更改:

driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
user=root
password=01050233

这里我们来举个例子使用工具类。我们写一个类JdbcCURD实现对特定数据库的增删改查操作,并在main函数中使用。

JdbcCURD.java代码如下:

package com.cream.ice.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcCURD {

    private Connection connection;
    private Statement statement;
    private ResultSet resultSet;

    //更新操作
    public void update(String sql) {
        try {
            connection = JdbcUtils.getConnection();
            statement = connection.createStatement();
            //可执行创建、修改、删除表,添加、删除、修改元组以及查询sql语句
            statement.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseResources(resultSet, statement, connection);
        }
    }

    //查询操作
    public void Query(String sql) {
        try {
            connection = JdbcUtils.getConnection();
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);

            while(resultSet.next()){
                System.out.println("name:"+resultSet.getString("name"));
                System.out.println("id:"+resultSet.getString("Tid"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseResources(resultSet, statement, connection);
        }
    }

    //添加操作
    public void addElement(String sql) {
        update(sql);
    }

    //删除操作
    public void removeElement(String sql) {
        update(sql);
    }

    //创建一个表
    public void createTable(String sql){
        update(sql);
    }

    //删除一个表
    public void dropTable(String sql){
        update(sql);
    }

}

我们来写一个main函数来测试:

package com.cream.ice.jdbc;

import java.sql.SQLException;

public class JdbcTest {

    public static void main(String[] args) throws ClassNotFoundException,
            SQLException {

        JdbcCURD curd=new JdbcCURD();

        String sql = null;

        //添加表Teacher
        sql="create table Teacher (Tid char(9) primary key,name char(9) unique)";
        curd.createTable(sql);

        //添加元组
        sql = "insert into Teacher (Tid,name) values ('0001','Tom')";
        curd.addElement(sql);

        //查询Teacher表
        sql="select * from Teacher";
        curd.Query(sql);

        //删除元组
        sql="delete from Teacher where Tid='0001'";
        curd.removeElement(sql);

        //删除表Teacher
        sql="drop table Teacher";
        curd.dropTable(sql);
    }

}

经测试,将在控制台输出下列信息:

name:Tom
id:0001

与上一篇中对数据库的操作相比,从配置文件中读取要连接数据库的信息,大大提高了代码的复用性以及灵活性,省去了当更改数据库时还要更改代码的麻烦。

坚持原创技术分享,您的支持将鼓励我继续创作!
0%