手把手封装数据层之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 ), 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);
}
}
运行结果如下,说明我们封装的数据库是能够连接上的

手把手封装数据层之DButil数据库连接的封装的更多相关文章
- 手把手封装数据层之DataUtil数据库操作的封装
上一篇我们写完了数据库连接的封装 没有看的请移步上一篇关于数据库连接的内容 这次我们讲数据库操作的封装.数据库的操作就是增删改查:心再大一点就可以直接分为查询和其他. 因为查询是有返回对象的,而其他都 ...
- 瞎j8封装第二版之数据层的封装
看了以前写的代码,对就是下面这个 手把手封装数据层之DataUtil数据库操作的封装 觉得以前写的代码好烂啊!!!,重新理了一下思路,写得更规范和简练,应该效率也会高很多,用了一下下午写的连接池(半废 ...
- 【类库】私房干货.Net数据层方法的封装
[类库]私房干货.Net数据层方法的封装 作者:白宁超 时间:2016年3月5日22:51:47 摘要:继上篇<Oracle手边常用70则脚本知识汇总>文章的发表,引起很多朋友关注.便促使 ...
- angular开发中对请求数据层的封装
代码地址如下:http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项目 ...
- 【开源】OSharp框架解说系列(5.2):EntityFramework数据层实现
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介
日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...
- Spring Boot 系列(九)数据层-集成Spring-data-jpa
实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的.那么,随即而生的ORM框架就能很好的解决这个问题. 我们常用的ORM框架有:Hibernate.Mybatis.J ...
- 数据层的多租户浅谈(SAAS多租户数据库设计)
在上一篇“浅析多租户在 Java 平台和某些 PaaS 上的实现”中我们谈到了应用层面的多租户架构,涉及到 PaaS.JVM.OS 等,与之相应的是数据层也有多租户的支持. 数据层的多租户综述 多租户 ...
- JAVA 利用反射自定义数据层框架
之前的随笔一直都在介绍c#,主要公司最近的业务都是做桌面程序,那么目前c#中的WPF肯定是我做桌面程序的不二之选,做了半年的WPF,也基本摸清了c#写代码的套路和规则(本人之前是两年多的JAVA开发者 ...
随机推荐
- Selenium自动化初级/中级网络授课班招生
近期学习selenium和appium的测试人员越来越多,应广大刚接触UI自动化以及对selenium想要更深入了解的测试人员的要求,特请一位资深测试架构师为我们开课讲解selenium,以及如何设计 ...
- oracle-plsql序列问题
场景:用来汇总工作中数据库的异常问题! 1 问题 序列在会话中未定义 解决: 创建Sequence后直接查询它的当前值(CURRVAL)会出错,要先调用Sequence对象.NEXTVAL,才能查询当 ...
- (转)每天一个linux命令(8):cp 命令,复制文件和文件夹
场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件. cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一. 一般情况下,she ...
- yii2 获取从前台传过来的post数据
第一次使用yii写接口的时候,直接用了$_POST获取post数据,发现会报400错误,根本无法获取到post数据,用$_GET却能获取get数据. 纠结了很久,然后查资料,发现原来yii中默认的开启 ...
- ORACLE - 管理表空间和数据文件
ORACLE表空间是一个逻辑分区,一个数据文件只能属于一个表空间,一个表空间可以拥有多个数据文件. 一般情况下,如果一个实例分配给多个应用使用,需要创建不同的表空间,每个用户使用自己的表空间. 一.表 ...
- python 排序sorted
num = [3,2,4,6,5] anum = sorted(num) dnum = sorted(num,reverse=True) print '升序:',anum # 升序: [2, 3, 4 ...
- Android的ListView
ListView ListView 是一个控件,一个在垂直滚动的列表中显示条目的一个控件,这些条目的内容来自于一个ListAdapter. 一个简单的例子 布局文件里新增ListView <Li ...
- AdPlayBanner:功能丰富、一键式使用的图片轮播插件
AdPlayBanner:功能丰富.一键式使用的图片轮播插件 AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresc ...
- 剑指offer--二叉树的后序遍历
思路:对于一个二叉树的后序遍历序列来说,最后一个数一定是根节点,然后前面的数中,从最开始到第一个大于根节点的数都是左子树中的数,而后面到倒数第二个数应该都是大于根节点的,是右子树,如果后面的数中有小于 ...
- JavaScript 开发总结(一)
数据类型:JavaScript定义的数据类型有字符串.数字.布尔.数组.对象.Null.Undefined,但typeof有区分可判别的数据分类是number.string.boolean.objec ...