对JDBC操作数据库的简单封装
先来回顾一下java对数据库操作的典型步骤
1.创建数据库连接Connection
2.创建一个Statement
3.执行数据库操作,返回结果ResultSet
4.捕获处理异常
5.关闭资源和连接
好,就根据以上的步骤一步一步创建自己的数据库管理工具.
首先我们要创建一个数据库管理类DBManager,在这里使用单例模式来创建
private static volatile DBManager instance = null;private DBManager(){}public static DBManager getInstance(){if(instance == null){synchronized(DBManager.class){if(instance == null){instance = new DBManager();}}}return instance;}
接下来,就是连接数据库了,先使用纯正的jdbc进行连接,不使用连接池(下篇会介绍)
在这里我们使用ResourceBundle来读取数据库配置文件
static {try{ResourceBundle rb = ResourceBundle.getBundle("database");driver = rb.getString("driver").trim();url = rb.getString("url").trim();user = rb.getString("user").trim();password = rb.getString("password").trim();}catch(Exception e){try {throw new DBException("配置文件未找到", e);} catch (Exception ex) {ex.printStackTrace();}}}
放在static代码块中的原因就不多说了,不知道ResourceBundle的自己google
下面是得到实际的数据库连接
private Connection getConnection() throws DBException{Connection conn = null;try {Class.forName(driver);} catch (ClassNotFoundException e) {throw new DBException("数据库驱动未找到",e);}try{conn = DriverManager.getConnection(url, user, password); }catch(SQLException e){throw new DBException("数据库连接出错,请检查URL,用户名,密码是否正确",e);}return conn;}
在这里使用了DriverManager(会消耗很大的资源),DBEXception为我自己自定义的异常,因为SQLException太宽泛了,在这里分别抛出DBException以便了解到底是在哪里
出现了异常
最后通过一个对查询的封装来展示
/*** * @auther lishan* @description 查询* @param sql 查询语句* @param paras 查询参数 对应sql语句中的?* @return 查询结果(ArrayList)方便使用* @throws DBException* @date 2013年12月16日上午9:27:20*/@SuppressWarnings("rawtypes")public ArrayList execQuery(String sql,Object ...paras) throws DBException{//初始化要使用的变量 Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;ResultSetMetaData rsmd = null;ArrayList<HashMap<String,Object>> result = new ArrayList<HashMap<String,Object>>();try{conn = getConnection(); //获取连接ps = conn.prepareStatement(sql); //使用prepareStatment能够增加性能和防止SQL注入for(int i = 0;i < paras.length;i++){ //将参数赋值给?ps.setObject(i+1, paras[i]); //注意这里是i+1不是i,prepareStatment的索引从1开始}rs = ps.executeQuery(); //执行查询rsmd = rs.getMetaData(); //获取元数据用来获得列名int columnCount = rsmd.getColumnCount();//获得列的总数while(rs.next()){ //遍历结果集HashMap<String,Object> row = new HashMap<String,Object>();for(int i = 1; i < columnCount;i++){row.put(rsmd.getColumnName(i), rs.getObject(i));}result.add(row);}}catch(SQLException e){throw new DBException("数据查询出错", e);}finally{ //关闭资源和连接try {if(rsmd != null){rsmd = null;}if(rs != null){rs.close();}if(ps != null){ps.close();}if(conn != null){conn.close();}} catch (SQLException e) {throw new DBException("数据库关闭出错",e);}}return result;}
关于更新,插入,删除的封装和查询代码相似,比查询要简单。
这样就写完了自己的DBUtil了,也不是很难。。。。。。
转载于:https://www.cnblogs.com/xviubu/p/3476880.html
对JDBC操作数据库的简单封装相关推荐
- nodejs操作sqlserver数据_nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例...
本文实例讲述了nodejs基于mssql模块连接sqlserver数据库的简单封装操作.分享给大家供大家参考,具体如下: 注意:开启sqlserver服务器允许远程连接的步骤,自行百度,很多经验,no ...
- nodejs操作sqlserver数据_实例分析nodejs基于mssql模块连接sqlserver数据库的简单封装操作...
本文主要介绍了nodejs基于mssql模块连接sqlserver数据库的简单封装操作,结合实例形式分析了nodejs中mssql模块的安装与操作sqlserver数据库相关使用技巧,需要的朋友可以参 ...
- Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等
MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...
- JavaWeb:用JDBC操作数据库
JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 什么是JDBC JDBC的全称是 ...
- 24、jdbc操作数据库(1)
什么是jdbc? 看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API. Jdbc有什 ...
- java监听数据库操作_第十六篇——JDBC操作数据库之监听器
JavaWeb应用中,很多的地方都和session有关.因此session相关的事件监听器,在日常工作中非常有用. 有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实 ...
- Mybatis介绍、jdbc操作数据库原始写法以及Mybatis架构
文章目录 Mybatis介绍 jdbc操作数据库原生写法 使用jdbc编程问题总结 Mybatis架构 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个 ...
- 20.JDBC操作数据库
目录 1. Java基本介绍 2. JDK下载安装及其环境配置 3. 一个简单的java程序 4. Eclipse基本使用.数据类型.运算符 5. 控制语句(if.switch.for.while.f ...
- Java笔记(第七篇 JDBC操作数据库)
JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...
最新文章
- python 因果推断_KDD 2018:微软推出用于因果推断的Python库
- 版本效果MoonWarrior cocos2d-x版本 --1
- 3.3 集束搜索-深度学习第五课《序列模型》-Stanford吴恩达教授
- c语言不允许对数组的大小做动态定义,数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt...
- 比赛,幸福度_幸福与生活满意度
- js设计模式——3.观察者模式
- linux上设置tomcat下web项目只需要ip地址访问省略端口和项目名称
- oracle12c下载安装
- Hibernate一级缓存和二级缓存详解
- 系统测试计划编写(四)
- JMeter使用教程(一)
- TOYOTA MOTOR CORPORATION Programming Contest 2022(AtCoder Beginner Contest 270) AB题解
- 什么是L2行情接口?
- Codeforces 1102F Elongated Matrix——状压dp
- 华为机试:统计射击比赛成绩
- python获取cpu温度_Python如何读取CPU和GPU的温度?
- ReactNative开发之在原生页面调用rn控件
- 英语作文考前必背10大类万能句型
- VUE计算属性如何带参数
- 阿里云更换系统盘(公共镜像)
热门文章
- CVPR2021 双图层实例分割,大幅提升遮挡处理性能
- 香港中文大学(深圳)吴保元教授课题组博士后招聘
- 阿里摩酷实验室计算机视觉团队校园招聘
- 【Top 50】中美人工智能高被引学者榜单:孙剑、何恺明、李飞飞进前5
- TextTopicNet:CMU开源无标注高精度自监督模型
- 程序员在火车站候车室写代码画面曝光,网友:程序员的悲哀
- CVPR系列(二)—— 双图层实例分割,大幅提升遮挡处理性能
- 【TensorFlow】TensorFlow函数精讲之tf.truncated_normal()
- Python中的operator.itemgetter函数
- 机器学习(四)高斯混合模型