手把手封装数据层之DButil数据库连接的封装

最近这段时间一直在用SSM框架做增删改查,突然想把以前还不会用框架的时候,综合百度和各种资料结合API文档抄袭而来的数据层的封装分享给大家。这边先封装一个DButil。

我这个封装就是烂大街的那种,没什么特别。

//DButil.java

package com.yck.database;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DButil
{
    private static String username;
    private static String password;
    private static String url;
    private static String driver;
    static
    {
        getDatabaseInfo("jdbc.properties");
        try
        {
            Class.forName(driver);
        } catch (ClassNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void getDatabaseInfo(String path)
    {
        InputStream in = DButil.class.getClassLoader().getResourceAsStream(path);
        Properties p = new Properties();
        try
        {
            p.load(in);
            username = p.getProperty("jdbc.username");
            password = p.getProperty("jdbc.password");
            url = p.getProperty("jdbc.url");
            driver = p.getProperty("jdbc.driver");
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    public static Connection getConnection()
    {
        Connection conn = null;
        try
        {
            conn = DriverManager.getConnection(url,username,password);
        }catch (SQLException e)
        {
            e.printStackTrace();
        }
        return conn;
    }
    public static void closeConnection(Connection connection)
    {
        try
        {
            if(connection != null)
            {
                connection.close();
                connection = null;
            }
        }  catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static PreparedStatement prepareStatement(Connection connection,String sql)
    {
        PreparedStatement preparedStatement = null;
        try
        {
            preparedStatement = connection.prepareStatement(sql);
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return preparedStatement;
    }
    public static void closePreparedStatement(PreparedStatement preparedStatement)
    {
        try
        {
            if(preparedStatement != null)
            {
                preparedStatement.close();
                preparedStatement = null;
            }
        }  catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static Statement createStatement(Connection connection)
    {
        Statement statement = null;
        try
        {
            statement = connection.createStatement();
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return statement;
    }
    public static void closeStatement(Statement statement)
    {
        try
        {
            if(statement != null)
            {
                statement.close();
                statement = null;
            }
        }  catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
    public static ResultSet getResultSet(Statement statement,String sql)
    {
        ResultSet resultSet = null;
        try
        {
            resultSet = statement.executeQuery(sql);
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return resultSet;
    }
    public static void closeResultSet(ResultSet resultSet)
    {
        try
        {
            if(resultSet != null)
            {
                resultSet.close();
                resultSet = null;
            }
        }  catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

}

这里是数据库连接需要的jdbc.properties,我们是通过DButil类的读取properties文件的办法来将DButil实例化的。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=true
jdbc.username=root
jdbc.password=8888888

数据库写了个很简单的来测试

CREATE DATABASE test;
USE test;

CREATE TABLE t_user
(
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(20),
age INT,
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8

手动插了两条数据,数据库的内容如下

下面我们来测试一下,新建一个Test类

package com.yck.database;

import java.sql.*;

public class Test
{

    public static void main(String[] args)
    {
        Connection conn = DButil.getConnection();
        Statement stam =DButil.createStatement(conn);
        String sql = "select * from t_user";
        ResultSet rs = null;
        try
        {
            rs = stam.executeQuery(sql);
            while(rs.next())
            {
                System.out.println(rs.getString("name"));
            }

        } catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        DButil.closeResultSet(rs);
        DButil.closeStatement(stam);
        DButil.closeResultSet(rs);
    }

}

运行结果如下,说明我们封装的数据库是能够连接上的

时间: 2024-10-26 00:31:39

手把手封装数据层之DButil数据库连接的封装的相关文章

瞎j8封装第二版之数据层的封装

看了以前写的代码,对就是下面这个 手把手封装数据层之DataUtil数据库操作的封装 觉得以前写的代码好烂啊!!!,重新理了一下思路,写得更规范和简练,应该效率也会高很多,用了一下下午写的连接池(半废品...) 瞎j8封装第二版之数据库连接池 下面直接上代码,代码很好理解,就是用了简单的反射,注解的部分我都写了注释 package jdbc; import util.StringUtil; import java.lang.reflect.Field; import java.lang.refl

【类库】私房干货.Net数据层方法的封装

[类库]私房干货.Net数据层方法的封装 作者:白宁超 时间:2016年3月5日22:51:47 摘要:继上篇<Oracle手边常用70则脚本知识汇总>文章的发表,引起很多朋友关注.便促使笔者收集整理此文.本文主要针是对微软技术对数据库(下文案例采用的)操作时,调用执行方法的封装,这也是数年逐渐学习.吸收.实践.完成的一个类库.其中不免有不合理之处,亦或是不符合个别读者的使用习惯.在此,共享此文,权当互相学习.(本文原创,转载注明出处:私房干货.Net数据层方法的封装) 1 概述 本文分以下几

数据层优化-jdbc连接池简述、druid简介

终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化去写,本篇是一个开始.本文会介绍连接池技术并对比目前比较流行的java连接池技术,之后,会把druid整合到项目中来,将技术方案落地,实际整合到项目中,让技术能为我所用. 使用连接池的原因 jdbc的demo //第一步,注册驱动程序 //com.MySQL.jdbc.Driver Class.fo

【开源】OSharp框架解说系列(5.2):EntityFramework数据层实现

〇.前言 上篇 的数据层设计中,我们主要设计了数据对对外开放的 实体基类EntityBase<TKey>,单元操作接口IUnitOfWork 和 数据仓储接口IRepository<TEntity, TKey>,下面我们来解说怎样来使用 EntityFramework 对这些数据访问需求进行实现.EntityFramework 的实现中,我们不仅要实现以上设计的两个接口,还要做以下几件事: 设计一个与 业务实体解耦的 EntityFramework数据上下文类 设计 实体加载方案,

Why 使用TLS记录协议封装IP层VPN IS A Bad Idea

一个很自然的想法,使用TLS封装一个IP数据报实现一个第三层的VPN.这种想法一定是经过了深思熟虑的,但是不幸的是,这是个错误的想法.有一篇文章<Why TCP Over TCP Is A Bad Idea>,详细解释了Why.事实上重传叠加问题是无法解决的,要知道,TCP的RTO计算是极其复杂的,影响它的因素也很多,这就是说,只要你用一个TCP封装另一个TCP,外层TCP丢包,且RTO小于内层TCP的RTO,连接就会崩溃.而以上这个条件是很容易满足的.       用TLS来封装IP数据报是

国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用05:数据层Dao使用

InitPHP框架是一款轻量级PHP开源框架,框架文档和下载地址:http://initphp.com Dao层说明 Dao层通俗的讲就是数据层.再简单的讲,Dao层主要是用于写sql语句的.可能没有搞过Java的同学会对DAO层比较陌生,甚至不能接受. 但是引入DAO层有非常大的好处: 1. 将业务和数据操作进行剥离.例如将原来的MVC中的module层分割成Service和Dao层.Service主要用来负责业务操作,而Dao主要用来负责数据的操作. 2. 原来的MVC模式,项目开发越久,时

JDBC 对数据库连接的封装

1.BaseDao :抽象基类,其中定义了用于打开连接,得到Statement,执行SQL,关闭资源的基础数据库操作方法. 2.I***Dao :操作指定数据表的接口:定义了操作数据表的抽象方法. 3***DaoImpl:具体工具类.实现I***Dao接口,继承BaseDao抽象类.用BaseDao中的方法实现I***Dao接口中定义的抽象接口. 基类用来提供访问数据库的基础方法,接口中定义了操作一个数据表所用到的方法.而具体类继承了基类就可以访问数据库,实现了接口就可以使用接口来操作数据库.

数据层spring-dao.xml配置文件中C3P0连接池配置详解

数据层spring-dao.xml配置文件中C3P0连接池配置详解 先放上两种配置文件bean的相关代码,文章下面会有详细的配置属性的讲解,大家可以自己添加配置和修改配置普通单一数据库连接池配置: <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置连接池属性 --> <property name="driverClas

如何设计一个坚如磐石的数据层?

在现代软件工程的开发应用和系统设计中,我们一般把软件系统的逻辑层次分为三层:展示层,处理层和数据层.数据层又可细分为缓存层,数据库层和文件存储层,如图: 鉴于创建高性能程序的关键是多花时间在系统设计上,本文主要对软件系统的数据层优化设计做一些阐述和归纳总结. 缓存 在互联网系统中,缓存技术对高并发,高性能的帮助起着功不可没的作用.以目前使用最为广泛的是redis3.0版本为例,其有三种工作模式: 以上3种模式都支持级联部署.针对不同数据量大小,一般可采用两种方案: 如果数据量在10G以内,单ma