简单的Java数据库连接和关闭工具类

简介:
写JDBC应用的人常常为关闭资源而头痛不已,这些代码枯燥无味,如何才能用简单的代码进行关闭呢,下面我写了一个方法,可以解除你的痛苦:
 
         /** 
         * 关闭所有可关闭资源 
         * 
         * @param objs 可关闭的资源对象有Connection、Statement、ResultSet,别的类型资源自动忽略 
         */
 
         public  static  void closeAll(Object... objs) { 
                 for (Object obj : objs) { 
                         if (obj  instanceof Connection) close((Connection) obj); 
                         if (obj  instanceof Statement) close((Statement) obj); 
                         if (obj  instanceof ResultSet) close((ResultSet) obj); 
                } 
        }
 
这个方法,带了“...”参数,这个实际上是Java5中的可变参数方法。可以不论顺序,不论个数,调用时候直接关闭想要关闭的资源对象就ok了。例如:
 
catch (SQLException e) { 
                        e.printStackTrace(); 
                }  finally { 
                        DBTools.closeAll(stmt, pstmt1, pstmt2, conn); 
                }
 
下面给出这个类完整的写法:
package com.lavasoft.ibatistools.common; 

import com.lavasoft.ibatistools.bean.Table; 
import com.lavasoft.ibatistools.metadata.DataSourceMetaData; 
import com.lavasoft.ibatistools.metadata.MySQLDataSourceMetaData; 

import java.io.IOException; 
import java.io.InputStream; 
import java.sql.*; 
import java.util.List; 
import java.util.Properties; 

/** 
* 简单的Java数据库连接和关闭工具类 

* @author leizhimin 11-12-20 下午4:32 
*/
 
public  class DBTools { 
         private  static String driverClassName, url, user, password; 

         static { 
                init(); 
        } 

         private  static  void init() { 
                InputStream in = DBTools. class.getResourceAsStream( "/com/lavasoft/ibatistools/jdbc.properties"); 
                Properties preps =  new Properties(); 
                 try { 
                        preps.load(in); 
                        driverClassName = preps.getProperty( "jdbc.driver"); 
                        url = preps.getProperty( "jdbc.url"); 
                        user = preps.getProperty( "jdbc.username"); 
                        password = preps.getProperty( "jdbc.password"); 
                }  catch (IOException e) { 
                        e.printStackTrace(); 
                } 
        } 

         /** 
         * 创建一个JDBC连接 
         * 
         * @return 一个JDBC连接 
         */
 
         public  static Connection makeConnection() { 
                Connection conn =  null
                 try { 
                        Class.forName(driverClassName); 
                        conn = DriverManager.getConnection(url, user, password); 
                }  catch (ClassNotFoundException e) { 
                        e.printStackTrace(); 
                }  catch (SQLException e) { 
                        e.printStackTrace(); 
                } 
                 return conn; 
        } 

         public  static  void close(Connection conn) { 
                 if (conn !=  null
                         try { 
                                conn.close(); 
                        }  catch (SQLException e) { 
                                e.printStackTrace(); 
                        } 
        } 

         public  static  void close(ResultSet rs) { 
                 if (rs !=  null
                         try { 
                                rs.close(); 
                        }  catch (SQLException e) { 
                                e.printStackTrace(); 
                        } 
        } 

         public  static  void close(Statement stmt) { 
                 if (stmt !=  null
                         try { 
                                stmt.close(); 
                        }  catch (SQLException e) { 
                                e.printStackTrace(); 
                        } 
        } 

         /** 
         * 关闭所有可关闭资源 
         * 
         * @param objs 可关闭的资源对象有Connection、Statement、ResultSet,别的类型资源自动忽略 
         */
 
         public  static  void closeAll(Object... objs) { 
                 for (Object obj : objs) { 
                         if (obj  instanceof Connection) close((Connection) obj); 
                         if (obj  instanceof Statement) close((Statement) obj); 
                         if (obj  instanceof ResultSet) close((ResultSet) obj); 
                } 
        } 

         public  static  void main(String[] args) { 
                DataSourceMetaData dbmd = MySQLDataSourceMetaData.instatnce(); 
                List<Table> tableList = dbmd.getAllTableMetaData(DBTools.makeConnection()); 
                 for (Table table : tableList) { 
                        System.out.println(table); 
                } 
        } 
}
 
因为是在写工具,连接用到的次数很少,所以这里采用jdbc模式创建,而没有用到连接池。关闭方法用起来很爽,减少了代码量,也提高了程序的可靠性和质量。
 


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/746904,如需转载请自行联系原作者
相关文章
|
1月前
|
数据采集 Java 关系型数据库
Java代码高效连接数据库
Java代码高效连接数据库
19 2
|
21天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
29天前
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
21 1
|
29天前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
15 1
|
4天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
7天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
25天前
|
JSON Java 网络安全
Java使用hutool工具类发送网络请求
Java使用hutool工具类发送网络请求
41 0
|
1月前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
11 1
|
1月前
|
SQL Java 关系型数据库
在Python中编写Java数据库驱动是不可能的
在Python中编写Java数据库驱动是不可能的
|
1月前
|
SQL Java 关系型数据库
Java数据库访问
Java数据库访问