jdbcUtil工具类简单封装

先阐述一下JDBC的一些核心API

java.sql.* JDBC规范都是当前包内

java.sql.DriverManager 驱动管理类,工具类
–| static void registerDriver(java.sql.Driver driver); 注册加载驱动,提供给当前程序使用
–| static java.sql.Connection getConnection(String url, String user, String password);
获取当前数据库连接对象,对应的URL,user,和password

interface java.sql.Connection 数据库连接接口
–| java.sql.Statement createStatement(); 获取数据库SQL语句搬运工,只是把SQL语句搬运到MySQL数据库中,不会对SQL语句做任何的判断。
–| java.sql.PreparedStatement PrepareStatement(String sql); 获取数据库SQL语句的预处理对象,可以预处理SQL语句,判断一些SQL异常,降低MySQL数据库压力,提供执行效率

interface java.sql.Statement 数据库SQL语句搬运工
–| int executeUpdate(String sql); 执行insert, update, delete, create, drop这些修改数据库内容提供的语句,返回值类型是int类型,返回的数据是当前SQL语句执行MySQL数据操作受到影响的行数
–| java.sql.ResultSet executeQuery(String sql); 执行select语句,获取到数据库查询结果集对象。ResultSet Never null

interface java.sql.PreparedStatement 数据库SQL语句预处理搬运工 【重点】
–| int executeUpdate(); 执行在获取PreparedStatement实现类对象时预处理SQL语句,insert,update,delete,主要操作的内容是对于数据库的数据修改。能够有效的防止【SQL注入】
–| java.sql.ResultSet executeQuery(); 执行在获取PreparedStatement实现类对象时预处理SQL语句,select语句,获取查询结果集对象。能够有效的防止【SQL注入】
–| setXXX(int index, Object value); 设计SQL语句执行所需参数
setInt setFloat set

interface java.sql.ResultSet 查询结果集
–| boolean next(); 判断当前结果集对象是否可以继续遍历
–| XXX getXXX(int index); 获取指定下标对应字段的数据
–| XXX getXXX(String fieldName); 获取指定字段名对应的数据

对应db.properties文件
user=root
password=123456
url=jdbc:mysql://localhost:3306/javaeestudy?useSSL=true
driverClass=com.mysql.jdbc.Driver

封装
package util;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**

    1. 加载驱动
  • 加载驱动的过程,我们希望是一个自动化过程,当JdbcUtil工具类加载到内存时
  • 直接完成对应的操作
    1. 获取数据库连接
  • 让当前获取数据库的方法更加简单,不要考虑数据库URL,数据库用户名User,数据库密码
  • password
    1. 辅助关闭资源
  • 对外提供的方法,要足够,要满足多种情况,而且非常方法
  • 为了更好的使用,在当前JdbcUtil工具类内的所有方法,都是静态成员方法
  • 使用配置文件的方式,从src目录下的db.properties文件中读取JDBC连接数据库的必要资源
  • user用户名,password密码,url JDBC连接数据库的地址,driverClass 驱动类名
  • IO流!!!

*/
public class JdbcUtil {
// 准备一些必要的参数
private static String user = null;
private static String password = null;
private static String url = null;

// 1. 使用静态代码块,完成当前程序的一些初始化参数过程
static {
    try {
        // Properties 属性类,保存的数据形式都是键值对形式,用于从文件中读取内容
        Properties properties = new Properties();

        // 创建db.properties文件的字节输入流对象
        InputStream in = new FileInputStream("./src/db.properties");

        // Properties加载对应的db.properties
        properties.load(in);

        // 从db.properties读取对应的属性
        user = properties.getProperty("user");
        password = properties.getProperty("password");
        url = properties.getProperty("url");

        Class.forName(properties.getProperty("driverClass"));
    } catch (ClassNotFoundException | IOException e) {
        e.printStackTrace();
    }
}

/**
 * 对当前工具类外提供的获取数据库连接对象的方法
 *
 * @return java.sql.Connection 数据库连接对象,如果连接失败返回null
 */
public static Connection getConnection() {
    Connection conn = null;

    try {
        conn = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return conn;
}

   /**
 * 数据库连接对象关闭方法
 * @param connection java.sql.Connection 数据连接对象
 */
public static void close(Connection connection) {
    close(connection, null, null);
}

/**
 * 关闭数据库连接对象,statement数据库搬运工对象
 * @param connection java.sql.Connection 数据连接对象
 * @param statement java.sql.Statement 数据库SQL语句搬运工对象
 */
public static void close(Connection connection, Statement statement) {
    close(connection, statement, null);
}

/**
 * 关闭数据库连接对象,statement数据库搬运工对象,resultSet查询结果集对象
 * @param connection java.sql.Connection 数据连接对象
 * @param statement java.sql.Statement 数据库SQL语句搬运工对象
 * @param resultSet java.sql.ResultSet 查询结果集对象
 */
public static void close(Connection connection, Statement statement, ResultSet resultSet) {
    try {
        if (resultSet != null) {
            resultSet.close();
        }
        if (statement != null) {
            statement.close();
        }
        if (connection != null) {
            connection.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}

使用C3P0线程池和jar包

com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/javaeestudy?useSSL=true root 123456 5 5 10 40 200 5

package util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.*;

public class JdbcUtil {

/*
创建C3P0数据库连接池对象工具,会自动加载在src目录下的c3p0-config.xml文件
 */
private static ComboPooledDataSource pool = new ComboPooledDataSource();
/**
 * 对当前工具类外提供的获取数据库连接对象的方法
 *
 * @return java.sql.Connection 数据库连接对象,如果连接失败返回null
 */
public static Connection getConnection() {
    Connection conn = null;

    try {
        // 获取数据库连接从数据库连接池对象中获取
        conn = pool.getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return conn;
}

   /**
 * 数据库连接对象关闭方法
 * @param connection java.sql.Connection 数据连接对象
 */
public static void close(Connection connection) {
    close(connection, null, null);
}

/**
 * 关闭数据库连接对象,statement数据库搬运工对象
 * @param connection java.sql.Connection 数据连接对象
 * @param statement java.sql.Statement 数据库SQL语句搬运工对象
 */
public static void close(Connection connection, Statement statement) {
    close(connection, statement, null);
}

/**
 * 关闭数据库连接对象,statement数据库搬运工对象,resultSet查询结果集对象
 * @param connection java.sql.Connection 数据连接对象
 * @param statement java.sql.Statement 数据库SQL语句搬运工对象
 * @param resultSet java.sql.ResultSet 查询结果集对象
 */
public static void close(Connection connection, Statement statement, ResultSet resultSet) {
    try {
        if (resultSet != null) {
            resultSet.close();
        }
        if (statement != null) {
            statement.close();
        }
        if (connection != null) {
            connection.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}

URL 统一资源定位符,地址
jdbc:mysql://localhost:3306/数据库名?useSSL=true
jdbc: JDBC规范的总协议
mysql: 目前的数据库选择,并且是子协议
//localhost:3306: 数据库的主机名,IP地址 3306是MySQL数据库的默认端口号
/javaee1906: 告知MySQL数据库,目前操作的数据库是javaee1906 ==> use javaee1906

JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521

-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306

---------------------------SQL Server------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<:port>;DatabaseName=
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433

--------------------------DB2--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<:port>/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000

你可能感兴趣的:(jdbcUtil工具类简单封装)