最通用,最简洁的JDBC工具类,增删查改,建立关闭连接

只要涉及到必须使用sql语句进行数据库操作的都可以用这个工具类,复用价值超级棒的有木有?
要进行操作时,只需要自己写一条sql语句,再调用JdbcUtil中的一个方法就好了,是不是超简洁?

//JdbcUtil.java
package xaut.wjh.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.apache.commons.beanutils.BeanUtils;


/**
 * 通用的jdbc工具类
 *\获取连接\关闭连接\查询\更新
 * @author 小花花
 *
 */
public class JdbcUtil {

    private static String url = null ;

    private static String user = null ;

    private static String password = null ;

    private static String driverClass = null ;

        static{

            try{

                Properties prop = new Properties() ;


                InputStream in = JdbcUtil.class.getResourceAsStream("/jdbc.properties") ;


                prop.load(in);
                url = prop.getProperty("url") ;
                user = prop.getProperty("user") ;
                password = prop.getProperty("password") ;

                driverClass = prop.getProperty("driverClass") ;
                Class.forName(driverClass) ; 
            }catch(Exception e){
                e.printStackTrace();
         }  

        }
        /**
         * 建立连接
         * @return
         */
        public static Connection getConnection(){
            try {
                Connection conn = DriverManager.getConnection(url,user,password) ;
                return conn ;
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e) ;
            }
        }
        /**
         * 判断是否有查询的数据
         * @param sql
         * @param values sql中对应的参数值
         * @param clazz Bean对象的Class
         * @return
         */
        public static boolean query(String sql,Object[] values) {
            Connection con=null;
            PreparedStatement pstmt=null;
            ResultSet rs=null;
            try {
                con=DriverManager.getConnection(url,user,password);
                pstmt=con.prepareStatement(sql);
                ParameterMetaData pmd = pstmt.getParameterMetaData();
                int parameterCount=pmd.getParameterCount();
                for(int i=1;i<=parameterCount;i++) {
                    pstmt.setObject(i,values[i-1]);
                }
                rs=pstmt.executeQuery();
                if(rs.next()) {
                    return true;
                }
                else {
                    return false;
                }
            }
            catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException();
            }
            finally {
                JdbcUtil.close(pstmt, con, rs);;
            }
        }
        /**
         * 返回查询的结果
         * @param sql
         * @param values
         * @param clazz
         * @return
         */
        public static<T> List<T> query(String sql,Object[] values,Class<T> clazz) {
            Connection con=null;
            PreparedStatement pstmt=null;
            ResultSet rs=null;
            try {
                con=DriverManager.getConnection(url,user,password);
                pstmt=con.prepareStatement(sql);
                ParameterMetaData pmd = pstmt.getParameterMetaData();
                int parameterCount=pmd.getParameterCount();

                if(values!=null) {
                    for(int i=1;i<=parameterCount;i++) {
                        pstmt.setObject(i,values[i-1]);
                    }
                }

                rs=pstmt.executeQuery();
                ResultSetMetaData rsmd = rs.getMetaData();
                int count=rsmd.getColumnCount();
                List li=new ArrayList();
                while(rs.next()) {
                    Object obj=clazz.newInstance();
                    for(int i=1;i<=count;i++) {
                        Object value=rs.getObject(i);
                        BeanUtils.copyProperty(obj,rsmd.getColumnName(i),value);

                    }
                    li.add(obj);
                }
                return li;
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException();
            }
            finally {
                JdbcUtil.close(pstmt, con, rs);;
            }

        }
        /**
         * 通用的Jdbc更新操作:插入\删除\修改
         * @param sql
         * @param values
         */
        public static void update(String sql,Object[] values) {
            Connection con=null;
            PreparedStatement pStmt=null;
            try {
                con=DriverManager.getConnection(url,user,password);
                pStmt = con.prepareStatement(sql);
                ParameterMetaData pmd=pStmt.getParameterMetaData();
                int count=pmd.getParameterCount();

                for(int i=1;i<=count;i++) {
                    pStmt.setObject(i,values[i-1]);
                }
                pStmt.executeUpdate();

            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException();
            }
            finally {
                JdbcUtil.close(pStmt, con);
            }
        }
        public static void close(Statement stmt,Connection con) {
            if(stmt!=null) {
                try {
                    stmt.close();
                }
                catch(SQLException e) {
                    e.printStackTrace();
                }
                finally {
                    if(con!=null) {
                        try {
                            con.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }

            public static void close(PreparedStatement pstmt,Connection con,ResultSet rs){
                if(pstmt!=null){
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                        throw new RuntimeException(e) ;
                    }
                    finally{
                        if(con!=null){
                            try {
                                con.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                                throw new RuntimeException(e) ;
                            }
                            finally {
                                if(rs!=null){
                                    try {
                                        rs.close();
                                    } catch (SQLException e) {
                                        e.printStackTrace();
                                        throw new RuntimeException(e) ;
                                    }
                                }

                            }
                        }
                    }
                }

            }

}

另外还需要在src下建立一个jdbc.properties文件。如果需要连接不同的数据库只需要修改这个配置文件即可。
jdbc.properties

url=jdbc:mysql://localhost:3306/hibernate001?characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
user=root
password=root
driverClass=com.mysql.jdbc.Driver

猜你喜欢

转载自blog.csdn.net/flower_csdn/article/details/79828984
今日推荐