Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 393|回复: 0

[JDBC学习]简单的JDBC工具类

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 05:16:56 | 显示全部楼层 |阅读模式
    这个JDBC是以前业余时候写的,主要针对没有事物控制的应用,比如MySQL的一些应用。现在放出来大家评论评论不足,也好改进改进。
       
       
         
       
       
        jdbc.properties
       
       
       
         ## 同步源库数据库
         
    jdbc.url=jdbc:mysql:
         //192.168.1.101:3306/testdb?autoReconnect=true&zeroDateTimeBehavior=convertToNull
         
    jdbc.username=root
         
    jdbc.password=leizhimin
         
       
       
         
       
       
        DBToolkit.java
       
       
         
         
          package lavasoft.common;
          

          

          import org.apache.commons.logging.Log;
          

          import org.apache.commons.logging.LogFactory;
          

          

          import java.io.IOException;
          

          import java.sql.*;
          

          import java.util.List;
          

          import java.util.Properties;
          

          

          /**
    * JDBC工具类
    *
    * @author leizhimin 2009-11-24 9:28:03
    */
          

          public
          class DBToolkit {
          
             
          private
          static
          final Log log = LogFactory.getLog(DBToolkit.
          class);
          
             
          private
          static String url =
          null;
          
             
          private
          static String username =
          null;
          
             
          private
          static String password =
          null;
          
             
          private
          static Properties props =
          new Properties();
          

          
             
          static {
          
                     
          try {
          
                             props.load(DBToolkit.
          class.getResourceAsStream(
          "/jdbc.properties"));
          
                     }
          catch (IOException e) {
          
                             log.error(
          "#ERROR# :系统加载sysconfig.properties配置文件异常,请检查!", e);
          
                     }
          
                     url = (props.getProperty(
          "jdbc.url"));
          
                     username = (props.getProperty(
          "jdbc.username"));
          
                     password = (props.getProperty(
          "jdbc.password"));
          
                     
          //注册驱动类
          
                     
          try {
          
                             Class.forName(
          "com.mysql.jdbc.Driver")
          
                     }
          catch (ClassNotFoundException e) {
          
                             log.error(
          "#ERROR# :加载数据库驱动异常,请检查!", e);
          
                     }
          
             }
          

          
             
          /**
              * 创建一个数据库连接
              *
              * @return 一个数据库连接
              */
          
             
          public
          static Connection getConnection() {
          
                     Connection conn =
          null;
          
                     
          //创建数据库连接
          
                     
          try {
          
                             conn = DriverManager.getConnection(url, username, password);
          
                     }
          catch (SQLException e) {
          
                             log.error(
          "#ERROR# :创建数据库连接发生异常,请检查!", e);
          
                     }
          
                     
          return conn;
          
             }
          

          
             
          /**
              * 在一个数据库连接上执行一个静态SQL语句查询
              *
              * @param conn            数据库连接
              * @param staticSql 静态SQL语句字符串
              * @return 返回查询结果集ResultSet对象
              */
          
             
          public
          static ResultSet executeQuery(Connection conn, String staticSql) {
          
                     ResultSet rs =
          null;
          
                     
          try {
          
                            
          //创建执行SQL的对象
          
                             Statement stmt = conn.createStatement();
          
                            
          //执行SQL,并获取返回结果
          
                             rs = stmt.executeQuery(staticSql);
          
                     }
          catch (SQLException e) {
          
                             log.error(
          "#ERROR# :执行SQL语句出错,请检查!
    " + staticSql, e);
          
                     }
          
                     
          return rs;
          
             }
          

          
             
          /**
              * 在一个数据库连接上执行一个静态SQL语句
              *
              * @param conn            数据库连接
              * @param staticSql 静态SQL语句字符串
              */
          
             
          public
          static
          void executeSQL(Connection conn, String staticSql) {
          
                     
          try {
          
                            
          //创建执行SQL的对象
          
                             Statement stmt = conn.createStatement();
          
                            
          //执行SQL,并获取返回结果
          
                             stmt.execute(staticSql);
          
                     }
          catch (SQLException e) {
          
                             log.error(
          "#ERROR# :执行SQL语句出错,请检查!
    " + staticSql, e);
          
                     }
          
             }
          

          
            
            
               
             /**
              * 在一个数据库连接上执行一批静态SQL语句
              *
              * @param conn        数据库连接
              * @param sqlList 静态SQL语句字符串集合
              */
             
             
             public
             static
             void executeBatchSQL(Connection conn, List<String> sqlList) {
             
                     
             try {
             
                            
             //创建执行SQL的对象
             
                             Statement stmt = conn.createStatement();
             
                            
             for (String sql : sqlList) {
             
                                     stmt.addBatch(sql);
             
                             }
             
                            
             //执行SQL,并获取返回结果
             
                             stmt.executeBatch();
             
                     }
             catch (SQLException e) {
             
                             log.error(
             "#ERROR# :执行批量SQL语句出错,请检查!", e);
             
                     }
             
             }
             

             
             
             public
             static
             void closeConnection(Connection conn) {
             
                     
             if (conn ==
             null)
             return;
             
                     
             try {
             
                            
             if (!conn.isClosed()) {
             
                                     
             //关闭数据库连接
             
                                     conn.close();
             
                             }
             
                     }
             catch (SQLException e) {
             
                             log.error(
             "#ERROR# :关闭数据库连接发生异常,请检查!", e);
             
                     }
             
             }
             
    }
             
            
          
          
            
          
          
           这个类的实现中,有几点说明下:
          
          
           1、此类没有实例,一切静态化。
          
          
           2、此类线程安全。
          
          
           3、此类将数据库连接交给了使用者去控制,提高连接的利用率,常规的做法是每个SQL执行完成后,做一个关闭操作。
          
          
           通过此类,实现了原来iBatis实现的DAO和Service,因为传递了连接,改用JDBC实现时候去掉了DAO层,只有Service层,Service中的每个操作数据库的方法都会接收一个数据库连接参数。 以方便更高层对Connection的利用,最大限度的利用数据库连接,从而提高系统的效率。
          
          
           4、此类SQL异常时候,用户还有机会去关闭数据库连接。
          
          
           5、此类没有事物控制,如果需要的话,可以在Service此工具类中跑出SQLException,然后在Service中调用的时候进行控制,一旦发生异常,则回滚。一切都交给开发者自行处理控制,相比框架式的一刀切更能灵活控制事物,并能最大限度利用数据库连接的资源。
          
          
           6、此类的方法可以嵌套调用,为级联查询提供方便。以前iBatis的级联查询,我用此类全实现了。
          
          
            
          
          
           此类也存在一些不足:
          
          
           比如,无法去封装预定义SQL,也许有办法,但绝对不是轻而易举就能实现的。
          
          
           此类也无法对结果集自动封装为JavaBean或者List集合,这是比较麻烦的,实际上要实现自动封装,Apache的Commons DBUtils做的比较好。
          
          

          
         
       
    本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/233549


       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/11/051655812.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 07:21 , Processed in 0.358704 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表