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

Linux大全评论860 views阅读模式

写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模式创建,而没有用到连接池。关闭方法用起来很爽,减少了代码量,也提高了程序的可靠性和质量。

企鹅博客
  • 本文由 发表于 2019年9月17日 19:44:29
  • 转载请务必保留本文链接:https://www.qieseo.com/173140.html

发表评论