Java学习记录|基于Maven的Druid数据库连接池配置以及空指针异常问题的处理

一、基本使用

  1. 导入jar包,在pom.xml中添加相关的依赖
 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
</dependency>
  1. 定义配置文件,properties形式,放在resource文件夹里

druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/schema1
username=root
password=2010abc123kl
#初始化连接数
initialSize=5
#最大连接数
maxActive=10
#最长等待时间
maxWait=3000

  1. 获取数据库连接池对象,通过工厂类DuridDataSourceFactory来获取
public class DruidDemo {
    public static void main(String[] args) throws Exception {
        //1 定义配置文件
        //2 加载配置文件
        Properties properties=new Properties();
        InputStream inputStream=DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
        properties.load(inputStream);
        //3 获取连接池对象
        DataSource ds=DruidDataSourceFactory.createDataSource(properties);
        //4 获取连接
        Connection conn=ds.getConnection();
        System.out.println(conn);
    }
}
  1. 遇到空指针异常(NullPointerException)的情况,可能是因为放在了src根目录下,maven项目要把配置文件放在resources文件夹

在这里插入图片描述

5.可正确返回结果
在这里插入图片描述

二、druid工具类的创建

public class JDBCUtils {
    //1 定义成员变量
    private static DataSource ds;
    //2对datasource初始化赋值
    static {
        //3 加载配置文件
        Properties pro=new Properties();
        try {
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //4 获取datasource并且赋值
            ds= DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @description:提供连接方法
     */

    public static Connection getConnection() throws Exception{
        return ds.getConnection();
    }

    /**
     * @description:释放资源
     */
    public static void close(Statement stmt,Connection conn){
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();//归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(ResultSet rs,Statement stmt, Connection conn){
        if(rs!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();//归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * @description:获取连接池的方法
     */
    public static DataSource getDataSource(){
            return ds;
    }

}

测试(以向数据表中插入一行数据为例)

public class DruidJDBCTest {
    public static void main(String[] args) {
        /**
         * @description:添加操作给account
         */
        Connection conn=null;
        PreparedStatement pstmt=null;
        try {
            //1获取连接
            conn=JDBCUtils.getConnection();
            //2定义sql
            String sql="insert into account values(?,?,?)";
            //3获取pstmt对象
            pstmt=conn.prepareStatement(sql);
            //4给?赋值并执行sql
            pstmt.setInt(1, 5);
            pstmt.setString(2, "lin");
            pstmt.setDouble(3, 2000);
            int count=pstmt.executeUpdate();
            System.out.println(count);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //5释放资源
            JDBCUtils.close(pstmt, conn);//放回池子里
        }

    }

}
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值