JDBCUtil工具类,单线程模式

前言:

首先是一直在网上找的JDBCutil工具类,发现能用,但是一直模仿,自己缕清思路,写出一个属于自己的,那才是最好的。

编写JDBCUtil:

这里连接的是Mysql;
首先我们在项目中配置数据文件;
在这里插入图片描述
配置连接信息

driver-Class=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/purchase-sale-stock?characterEncoding=utf-8
user=root
password=1234

我们要使用单例模式,{何为单例模式:简单理解就是在程序中,只有一个实例对象};就要保证程序实例对象惟一,所以我们要实现构造方法私有化:

 private JdbcUtil(){
 }

私有化我们就必须在获取对象方法:
这里使用单线程,所以使用锁限制

 private static JdbcUtil jdbcUtil;
 public static JdbcUtil getJdbcUtil(){

        if(jdbcUtil==null){
            /*
            * 使用同步锁,防止多线程下对象实现多例化
            * */
            synchronized(JdbcUtil.class){
                if(jdbcUtil==null){
                    jdbcUtil=new JdbcUtil();
                }
            }
        }
        return jdbcUtil;
    }

到这里就完成一半;使用即可:

JdbcUtil jdbcUtil= JdbcUtil.getJdbcUtil()

这里可以获取到对象了。但是还没有真正意义上的连接到数据库,这里我们在服务器启动时就加载数据:
要注意这里重写的初始化方法,还有配置属性loadOnStartup = 0

@WebServlet(urlPatterns = "/JdbcUtilServlet",loadOnStartup = 0)
public class JdbcUtilServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        super.init();
        try {
        System.out.println("开始加载配置文件");

        InputStream inputstream = JdbcUtil.class.getResourceAsStream("/jdbc.properties");
        Properties properties=new Properties();
        properties.load(inputstream);
        JdbcUtil jdbcUtil=JdbcUtil.getJdbcUtil();
        jdbcUtil.initGetConnertion(properties);
        System.out.println("结束加载配置文件");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

这样就可以初始化数据了;
然后我们在Connection获取:
这里有方法在数据初始化的时候调用的

public Connection getConnertion(){
        return con;
    }
    public void initGetConnertion(Properties properties){
        driverClass=properties.getProperty("driver-Class");
        url=properties.getProperty("url");
        user=properties.getProperty("user");
        password=properties.getProperty("password");
        System.out.println(driverClass);
        System.out.println(url);
        System.out.println(user);
        System.out.println(password);
        initConnertion();
    }
    public void initConnertion(){
        try {
            Class.forName(driverClass);
            con= DriverManager.getConnection(url,user,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

写到这里就可以了,一个属于我们自己的单线程的JDBCUtil就出来了。
具体代码如下:


/*
* jdbcutil工具 类,单例模式
* */
public class JdbcUtil {

    private String driverClass;
    private String url;
    private String user;
    private String password;

    private static JdbcUtil jdbcUtil;
    private Connection con;
    /*
    * 私有化构造方法
    * */
    private JdbcUtil(){}
    /*
     * 获取实例化对象,单例模式
     * */
    public static JdbcUtil getJdbcUtil(){

        if(jdbcUtil==null){
            /*
            * 使用同步锁,防止多线程下对象实现多例化
            * */
            synchronized(JdbcUtil.class){
                if(jdbcUtil==null){
                    jdbcUtil=new JdbcUtil();
                }
            }
        }
        return jdbcUtil;
    }

    public Connection getConnertion(){
        return con;
    }
    public void initGetConnertion(Properties properties){
        driverClass=properties.getProperty("driver-Class");
        url=properties.getProperty("url");
        user=properties.getProperty("user");
        password=properties.getProperty("password");
        System.out.println(driverClass);
        System.out.println(url);
        System.out.println(user);
        System.out.println(password);
        initConnertion();
    }
    public void initConnertion(){
        try {
            Class.forName(driverClass);
            con= DriverManager.getConnection(url,user,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

初始化servlet:


@WebServlet(urlPatterns = "/JdbcUtilServlet",loadOnStartup = 0)
public class JdbcUtilServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        super.init();
        try {
        System.out.println("开始加载配置文件");

        InputStream inputstream = JdbcUtil.class.getResourceAsStream("/jdbc.properties");
        Properties properties=new Properties();
        properties.load(inputstream);
        JdbcUtil jdbcUtil=JdbcUtil.getJdbcUtil();
        jdbcUtil.initGetConnertion(properties);
        System.out.println("结束加载配置文件");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

结束!!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值