`

转载:自己实现的JDBC工具类

阅读更多
标签:JDBC Spring
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/233549
自己实现的JDBC工具类
最近做了个后台应用程序,刚开始用Spring+iBatis来做的,后来因为种种原因,不让用Spring、iBatis以及一些开源的工具包。
于是用JDBC重写了原来的Service实现,项目做完了。
这个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语句出错,请检查!\n" + 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语句出错,请检查!\n" + 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

分享到:
评论

相关推荐

    JDBC工具类(针对mySQL)

    1、JDBCUtil(JDBC工具类) 这里封装了Java与数据库建立连接,执行查询或更新语句,释放链接等基本方法,并使用连接池实现mySql高效率执行查询更新的功能。 2、SQLUtil(SQL语句工具类) 对基本SQL语句进行了...

    [转载] JDBC+Servlet+JSP整合开发之-JSP项目实战

    **JDBC** 是Java中用于与数据库交互的一组接口和类,它是Java标准API的一部分,允许程序员执行SQL语句并处理结果。在JDBC中,我们通常会经历以下步骤: 1. 加载数据库驱动。 2. 建立数据库连接。 3. 创建Statement或...

    JavaBean实体类 配置文件 代码一键自动生成工具

    代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、mybatis.xml *该工具目前支持3种数据源的生成方式,分别是:JDBC、.table、PDM *JDBC:选择JDBC是只...

    jdbc连接数据库的方式2

    如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象...

    JAVA源码 代码一键自动生成工具

    代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、mybatis.xml *该工具目前支持3种数据源的生成方式,分别是:JDBC、.table、PDM *JDBC:选择JDBC是只...

    (转载)自己动手写一个spring

    《自己动手写一个Spring》这篇文章主要探讨了Spring框架的核心概念,并通过模拟其实现来帮助读者深入理解其工作原理。Spring是Java开发中最流行的框架之一,它以依赖注入(Dependency Injection,DI)和面向切面编程...

    JAVA数据库连接大全-转载

    这篇博客"JAVA数据库连接大全-转载"可能详细介绍了在Java中如何管理和使用数据库连接,包括使用JDBC API,数据库连接池以及相关的工具。这里我们将深入探讨JDBC、数据库连接池的重要性和配置方法。 1. **JDBC基础**...

    jstl源代码,转载内容

    在提供的"jakarta-taglibs"压缩包中,可能包含了JSTL的所有源代码文件,包括各个标签库的实现、接口定义、辅助类等。通过深入阅读这些源代码,开发者可以更深入地理解JSTL的工作机制,从而在实际开发中更加灵活地...

    jsr168 portlet(struts2+spring2.5+hibernate3.3)(转载)

    【标题】"jsr168 portlet"是基于Java标准JSR168实现的portlet应用,它结合了Struts2、Spring2.5和Hibernate3.3这三大流行框架,以构建可复用、模块化的Web应用程序。JSR168(Portlet API 1.0)为portlet开发提供了...

    hibernate官方入门教程 (转载)

    标题“hibernate官方入门教程 (转载)”表明这是一份关于Hibernate框架的基础教学资源,可能是从官方文档或者其他可靠来源整理而来的,适合初学者了解和学习Hibernate。 描述中提到的“NULL”意味着没有具体的描述...

    Derby 命令(转载)

    Apache Derby是一款轻量级、嵌入式的关系型数据库管理系统,它是Java编写并完全遵循Java数据库连接(JDBC)标准的开源数据库。在本篇中,我们将深入探讨Derby的命令行工具及其在日常开发和管理中的应用。 首先,让...

    springmybatis

    在src_user下建立package:com.yihaomen.mybatis.model ,并在这个 package 下建立 User 类: 程序代码 程序代码 package com.yihaomen.mybatis.model; public class User { private int id; private String ...

    Java面试题

    深入讨论抽象类、接口、访问修饰符的区别和使用场景,以及如何利用多态实现动态绑定。 3. **集合框架**:重点掌握ArrayList、LinkedList、HashSet、HashMap等常见集合的内部结构和操作原理。了解List、Set、Map接口...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    j2ee在线购物网实例源码

    通过分析和研究这个源码,开发者可以深入理解如何在实际项目中运用J2EE技术栈,包括Servlet、JSP、JDBC、EJB、Spring、Hibernate等,以及如何设计和实现一个功能完善的电子商务系统。 【标签】"j2ee在线购物网实例...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    java事例集合1

    【描述】中的"事例集合1(转载)"表明这些内容可能来源于网络,可能是某个开发者或教育者收集并整理的Java编程实例,目的是帮助学习者通过实际操作来理解Java编程。而"看韩剧www.pigkrtv.com"这部分看起来像是无关的...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 ...

    word源码java-csdn-blogs:这是一个存储我的csdn博客的存储库

    5. 多线程编程:线程同步、线程池、并发工具类等。 6. 网络编程:Socket通信、HTTP请求等。 7. Java异常处理:自定义异常、异常链、try-catch-finally语句块等。 8. 开源系统和框架:Spring Boot、Spring Cloud、...

Global site tag (gtag.js) - Google Analytics