先来回顾一下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操作数据库的简单封装相关推荐

  1. nodejs操作sqlserver数据_nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例...

    本文实例讲述了nodejs基于mssql模块连接sqlserver数据库的简单封装操作.分享给大家供大家参考,具体如下: 注意:开启sqlserver服务器允许远程连接的步骤,自行百度,很多经验,no ...

  2. nodejs操作sqlserver数据_实例分析nodejs基于mssql模块连接sqlserver数据库的简单封装操作...

    本文主要介绍了nodejs基于mssql模块连接sqlserver数据库的简单封装操作,结合实例形式分析了nodejs中mssql模块的安装与操作sqlserver数据库相关使用技巧,需要的朋友可以参 ...

  3. Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等

    MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...

  4. JavaWeb:用JDBC操作数据库

    JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 什么是JDBC JDBC的全称是 ...

  5. 24、jdbc操作数据库(1)

    什么是jdbc? 看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API. Jdbc有什 ...

  6. java监听数据库操作_第十六篇——JDBC操作数据库之监听器

    JavaWeb应用中,很多的地方都和session有关.因此session相关的事件监听器,在日常工作中非常有用. 有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实 ...

  7. Mybatis介绍、jdbc操作数据库原始写法以及Mybatis架构

    文章目录 Mybatis介绍 jdbc操作数据库原生写法 使用jdbc编程问题总结 Mybatis架构 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个 ...

  8. 20.JDBC操作数据库

    目录 1. Java基本介绍 2. JDK下载安装及其环境配置 3. 一个简单的java程序 4. Eclipse基本使用.数据类型.运算符 5. 控制语句(if.switch.for.while.f ...

  9. Java笔记(第七篇 JDBC操作数据库)

    JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...

最新文章

  1. python 因果推断_KDD 2018:微软推出用于因果推断的Python库
  2. 版本效果MoonWarrior cocos2d-x版本 --1
  3. 3.3 集束搜索-深度学习第五课《序列模型》-Stanford吴恩达教授
  4. c语言不允许对数组的大小做动态定义,数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt...
  5. 比赛,幸福度_幸福与生活满意度
  6. js设计模式——3.观察者模式
  7. linux上设置tomcat下web项目只需要ip地址访问省略端口和项目名称
  8. oracle12c下载安装
  9. Hibernate一级缓存和二级缓存详解
  10. 系统测试计划编写(四)
  11. JMeter使用教程(一)
  12. TOYOTA MOTOR CORPORATION Programming Contest 2022(AtCoder Beginner Contest 270) AB题解
  13. 什么是L2行情接口?
  14. Codeforces 1102F Elongated Matrix——状压dp
  15. 华为机试:统计射击比赛成绩
  16. python获取cpu温度_Python如何读取CPU和GPU的温度?
  17. ReactNative开发之在原生页面调用rn控件
  18. 英语作文考前必背10大类万能句型
  19. VUE计算属性如何带参数
  20. 阿里云更换系统盘(公共镜像)

热门文章

  1. CVPR2021 双图层实例分割,大幅提升遮挡处理性能
  2. 香港中文大学(深圳)吴保元教授课题组博士后招聘
  3. 阿里摩酷实验室计算机视觉团队校园招聘
  4. 【Top 50】中美人工智能高被引学者榜单:孙剑、何恺明、李飞飞进前5
  5. TextTopicNet:CMU开源无标注高精度自监督模型
  6. 程序员在火车站候车室写代码画面曝光,网友:程序员的悲哀
  7. CVPR系列(二)—— 双图层实例分割,大幅提升遮挡处理性能
  8. 【TensorFlow】TensorFlow函数精讲之tf.truncated_normal()
  9. Python中的operator.itemgetter函数
  10. 机器学习(四)高斯混合模型