JDBC工具类实例
本文以讲解用单利模式实现一个简单的JDBC实用工具类 JDBC连接的四个基本步骤:
1、加载相应数据库驱动
2、建立相应数据库连接
3、构建Statement语句,即增删改查SQL语句
4、执行Statement语句 JDBC使用工具类的组成:
1、Connection方法
2、update方法,主要负责增删改等数据库操作
3、query方法,主要负责查询操作
4、关闭数据库连接,释放资源 单例模式的介绍:
概述:单例模式(Singleton Pattern)是 Java 中最简单的设计模式(设计模式主要是用来解决实际开发过程中出现的问题的一种思路或方法)之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。这样控制了系统中该类对象的数目,避免了过度创建多余对象浪费系统资源
实现思路:判断系统是否已经有这个单例,如果有则返回,如果没有则创建 实现代码如下:
public class DBUtils {
static private Connection conn;
static private PreparedStatement pstmt;
static private ResultSet rs;
// 使用单例模式实现的数据库Connection方法
static public Connection getConnection() {
try {
if (conn == null) {// 如果已经存在一个connection的实例化对象,则直接使用,避免大量创建多余对象浪费系统资源
Properties properties = new Properties();// 实例化一个properties加载相应数据库的配置信息
properties.load(DBUtils.class.getResourceAsStream("properties文件路径"));
String driver = properties.getProperty("driverClassName");
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
Class.forName(driver);// 加载数据库驱动
conn = DriverManager.getConnection(url, username, password);// 建立数据库连接
}
return conn;
} catch (Exception e) {
System.out.println("连接数据库不成功" + e.getMessage());
}
return null;
}
// 实现基本的数据库增删改操作
public int update(String sql, Object... obj) {
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);// 构建Statement查询语句
for (int i = 0; i < obj.length; i++) {
pstmt.setObject(1 + i, obj[i]);
}
int i = pstmt.executeUpdate();// 执行Statement语句
return i;// 返回操作影响响应表的行数
} catch (Exception e) {
System.out.println("更新数据失败");
}
return 0;
}
// 实现数据库的查询操作,这里以将查询结果构造成一个Map键值对的形式并存入List线性表中为例
public List<Map<String, Object>> query(String sql, Object... obj) {
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
pstmt.setObject(1 + i, obj[i]);
}
rs = pstmt.executeQuery();
////////////////////////
ArrayList<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>();
ResultSetMetaData metaData = rs.getMetaData();//获得数据库中相应表结构
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < metaData.getColumnCount(); i++) {
map.put(metaData.getColumnLabel(i + 1), rs.getObject(i + 1));
}
arrayList.add(map);
}
return arrayList;
///////////////////////
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
// 关闭数据库连接,数据库连接的关闭应该自低向上依次关闭
public void close() {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
System.out.println("关闭失败");
}
}
}
JDBC工具类实例的更多相关文章
- java使用注解和反射打造一个简单的jdbc工具类
a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...
- jdbc工具类1.0
package cn.zhouzhou; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManag ...
- 自己实现的JDBC工具类
最近做了个后台应用程序,刚开始用Spring+iBatis来做的,后来因为种种原因,不让用Spring.iBatis以及一些开源的工具包. 于是用JDBC重写了原来的Service实现,项目做完了 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 开源JDBC工具类DbUtils
本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- JDBC第三篇--【事务、元数据、改造JDBC工具类】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 这是我JDBC的第二篇 http://blog.csdn.net/ho ...
随机推荐
- 201521123088《JAVA程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出 ...
- 201521123056 《Java程序设计》第13周学习总结
1. 本周学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 1.1 答: ...
- 201521123026《Java程序设》 第10周学习总结
1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 1.守护线程:setDaemon(true or false),如果所有前台线程死亡,守护线程自动结束,一般 ...
- C# 泛型集合
原文出处我的wiki,转载请说明出处 考虑到泛型在集合类型中的广泛应用,这里一起讨论. 1. 泛型 1.1 泛型的定义与约束 创建泛型方法.委托.接口或类时,需要在名称后增加尖括号及其中的泛型参数,泛 ...
- python之---进程
一.进程 1.什么是进程 (1)正在进行的一个过程或者说一个任务,而负责执行的就是CPU 2.进程与程序的区别 (1)程序仅仅是一堆代码而已,而进程指的是程序的运行过程 同一个程序执行两次,也是两个进 ...
- Http协议基本知识简介
HTTP协议是指超文本传输协议,位于应用层,HTTP规定数据格式,然后用tcp进行传输. 请求响应模式:简单理解为客户端对服务器发起请求,服务器响应客户端. 主要特点 无连接:无连接的含义是限制每次连 ...
- Redis学习笔记之一 : 配置redis
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...
- readfile & file_get_contents异同
记录一下:应用memcache时,准备把整个文件缓存到内存中,遇到了比较奇怪的事情,因为最初使用readfile来读取文件,结果这个函数返回一个字节数,而不是一个字符串,于是文件没办法再输出,最后使用 ...
- Opengl4.5 中文手册—A
因为opengl API 比较庞大,网络上还没有完整的.较新的opengl中文手册 这对很多人很不方便,所以整理了这一系列,用于帮助大家"快速浏览最新的opengl api" 为了 ...
- extract-text-webpack-plugin打包css后出现图片引用路径不对问题
在做项目过程中,发现引用了图片的less文件被extract-text-webpack-plugin打包过之后,里面的图片引用路径指向到了extract-text-webpack-plugin打包目录 ...