下面用一个统一的工具类封装一套用于数据库的JDBC操作:包括 1)获取数据库链接资源  2)释放数据库链接资源,包括Connection,Statement,PreparedStatement,ResultSet等 3)数据库的更新操作,包括插入,删除,修改  4)数据库的查询操作

  首先是1)获取数据库链接资源

     /*** 获取数据库链接的静态方法  这样子就保证了只加载一次文件的操作* @return* @throws Exception*/public static Connection getConn() throws Exception{String jdbcDriver=null;String url=null;String user=null;String password=null;Properties p=new Properties();InputStream is=JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");p.load(is);jdbcDriver=p.getProperty("jdbcDriver");url=p.getProperty("url");user=p.getProperty("user");password=p.getProperty("password");Class.forName(jdbcDriver);return DriverManager.getConnection(url, user, password);}

 

    其中  jdbc.properties  是属性配置文件,因为是通过  类名.class.getClassLoader().getResourceAsStream("jdbc.properties");获取的,所以

该属性配置文件需要放置在src目录下。其内容的例子:

  jdbcDriver=com.mysql.jdbc.Driver
  url=jdbc:mysql://localhost:3306/test
  user=root
  password=root

    接着是2)释放数据库链接资源

        /*** 关闭从数据库服务器等索取的资源:先关闭后获取的* @param conn* @param pstmt*/public static void closeResource(Connection conn,Statement stmt,ResultSet rs){if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}

  由于PreparedStatement是Statement的子接口,所以该方法也适合传入PreparedStatement的对象

  然后是3)数据库的更新操作,包括插入,删除,修改

        /*** 统一的更新操作 Statement:insert update delete* @param conn* @param sql* @throws Exception*/public void update(String sql){Connection conn=null;Statement stmt=null;try {conn=JDBCTools.getConn();stmt=conn.createStatement();stmt.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();} finally{closeResource(conn, stmt, null);}}/*** 适用于PreparedStatment* @param sql* @param args*/public void update2(String sql,Object ... args){Connection conn=null;PreparedStatement pstmt=null;ResultSet rs=null;try {conn=JDBCTools.getConn();pstmt=conn.prepareStatement(sql);for(int i=0;i<args.length;i++){pstmt.setObject(i+1, args[i]);}pstmt.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally{JDBCTools.closeResource(conn, pstmt, rs);}}

  其中这段代码:for(int i=0;i<args.length;i++){ pstmt.setObject(i+1, args[i]); } 的意思在于:设置SQL语句中的占位符 ? 的值。

  最后是4)数据库的查询操作:在这里写了通用的方法,目的在于将查询得到的结果集封装在统一的实体中,这里采用了泛型,反射机制的知识

        /*** 泛型方法  反射机制  通用的查询方法存储实体* @param clazz* @param sql* @param args* @return*/public <T> T getT(Class<T> clazz,String sql,Object ... args){T t=null;Connection conn=null;PreparedStatement pstmt=null;ResultSet rs=null;ResultSetMetaData rsmd=null;try {conn=JDBCTools.getConn();pstmt=conn.prepareStatement(sql);for(int i=0;i<args.length;i++){pstmt.setObject(i+1, args[i]);}rs=pstmt.executeQuery();if (rs.next()) {t=clazz.newInstance();Map<String, Object> map=new HashMap<String, Object>();//解析sql获取对象rsmd = rs.getMetaData();int numberOfColumns = rsmd.getColumnCount();for(int i=0;i<numberOfColumns;i++){                        //获取列的名字,如果有别名,则获取的是别名String columnName=rsmd.getColumnLabel(i+1);  map.put(columnName, rs.getObject(columnName));}if (map.size() > 0) {for(Map.Entry<String, Object> entry: map.entrySet()){String columnName=entry.getKey();Object columnValue=entry.getValue();Field field = t.getClass().getDeclaredField(columnName);field.setAccessible(true);field.set(t, columnValue);}}}} catch (Exception e) {e.printStackTrace();} finally{JDBCTools.closeResource(conn, pstmt, rs);}return t;}

转载于:https://www.cnblogs.com/SteadyJack/p/5255357.html

JDBC实现用于操作数据库Mysql的工具类JDBCTools相关推荐

  1. 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

     1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users ( id int primary keyaut ...

  2. lua mysql 事务_Lua 操作数据库(MySQL)

    Lua 操作数据库(MySQL) 对于简单的数据操作,我们可以使用文件,但是,有时这些文件操作可能效率不高.可扩展性和功能不够强大.为此,我们通常会切换到数据库.LuaSQL提供从Lua到数据库管理系 ...

  3. JAVA高效率 (秒级) 将千万条数据导入数据库 (已封装工具类)【详解】【一看就懂】

    该gif做了加速处理,便于观看~  今天在将一个500w+条数据的文件导入至数据库时,遇到一个异常,相信做大数据应该都有遇到.500w条数据说多不多,说少也不少.既然问题出现了,那么就一定要解决. 异 ...

  4. JDBC编程(Java操作数据库 MySQL)

    数据库提供了各种语言版本的API(一组函数/一组类),调用这些API就能操作数据库 而在Java中,又将各种数据库的api再次抽象封装成一套统一的API--JDBC 在中央仓库 Maven Repos ...

  5. JAVA——Java操作MySQL数据库的简单工具类[CLASS:DatabaseUtil]

    预备知识 Java连接MySQL数据库 源代码 package club.zstuca.util;import java.sql.Connection; import java.sql.DriverM ...

  6. javaWeb基础一:JDBC (java操作数据库的技术)

    1. JDBC 1.1 含义 JDBC : java database connectivity 由SUN公司提供的一套操作数据库的标准规范. JDBC与数据库驱动的关系:接口与实现的关系. 1.2 ...

  7. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  8. Java JDBC基础 连接数据库 操作数据库

    1.JDBC概述 1.1 数据持久化 持久化(persistence) :把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用数据持久化意味着将内存中的数据保存到硬盘上加以&qu ...

  9. 01-JDBC概念--JDBC(Java Database Connectivity:Java数据库连接):使用jdbc实现Java与数据库MySQL连接

    JDBC自学教程–终篇总结: 地址:http://blog.csdn.net/baidu_37107022/article/details/72600018 1.JDBC(Java Database ...

最新文章

  1. 电路设计中电阻电容电感的选择原则
  2. 幸运大抽奖 | 神策 2020 数据驱动用户大会等你来
  3. LFS-Git命令行向Github上传大文件
  4. java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决方法
  5. linux释放系统内存,系统运维
  6. rman坏块的检测与恢复
  7. matlab三次多样式对函数拟合,Matlab regress函数拟合多个变量分析
  8. 实现一个左滑删除功能
  9. C++ STL源码剖析之哈希表
  10. 局域网之间两台计算机同屏,spacedesk解决两台电脑同屏的问题
  11. 根据银行卡号获取对应的银行信息
  12. .wim .GHO 类型的镜像文件如何恢复系统
  13. 远程过程调用失败0x800706be
  14. 快来和网红 ChatGPT 聊天!!
  15. [4G5G专题-48]:物理层-无线资源映射RE Mapping
  16. 壁式框架内力计算_框架剪力墙结构的特点_剪力墙结构内力计算与设计
  17. 六度分离 (Floyd)
  18. 塔望·食业研究丨方便速食行业市场主要竞争品牌分析及研究
  19. 理解UVM中的virtual sequencer和virtual sequence
  20. 领域模型和活动图(汽车保险系统)

热门文章

  1. c语言栈的实现以及操作_python模拟栈的操作实现非递归方式的快速排序算法
  2. android平台java编程规范_Android Java类编写规范+优化建议
  3. qt checkbox 选中事件_Qt基础知识学习
  4. android 让应用恢复前台显示_Android程序由后台切换到前台
  5. mysql根据月份查询订单销售额
  6. mysql分裂函数函数_分裂函数等价于T-SQL?
  7. python输入月份判断季节_用户输入月份,判断这个月是哪个季节。(要求使用列表)_学小易找答案...
  8. c++语言socket udp聊天程序,使用C/C++实现Socket聊天程序
  9. 反恐精英的服务器存在哪个文件夹,反恐精英地图放在哪里 CS1.6地图放置位置详细介绍_游侠网...
  10. java中volatile关键字的含义_Java里volatile关键字是什么意思