数据库Java工具类MyUtils

jopen 9年前

这里是针对MYSQL数据库,使用dbcp数据库连接池,在src目录下有dbcpconfig.properties配置文件,需要MYSQL驱动包和dbcp相关的jar包

    import java.io.InputStream;    import java.lang.reflect.InvocationTargetException;    import java.lang.reflect.Method;    import java.sql.Connection;    import java.sql.DatabaseMetaData;    import java.sql.DriverManager;    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.HashMap;    import java.util.List;    import java.util.Map;    import java.util.Properties;        import javax.sql.DataSource;        import org.apache.commons.dbcp.BasicDataSourceFactory;        public class MyUtil {            private static Connection connection=null;                private MyUtil(){}            /**        * return DataSource        * @throws Exception        */        public static DataSource getDataSourceFromPro() throws Exception{            Class.forName("com.mysql.jdbc.Driver");            Properties prop = new Properties();            InputStream is = MyUtil.class.getClassLoader().getResourceAsStream        ("dbcpconfig.properties");            prop.load(is);            return BasicDataSourceFactory.createDataSource(prop);        }                /**        * return Connection from properties        * @throws Exception         */        public static Connection getConnectionFromPro() throws Exception {            return getDataSourceFromPro().getConnection();        }                /**        * return Statement        * @throws Exception         */        public static Statement getStatementFromPro() throws Exception{            return getConnectionFromPro().createStatement();        }                /**        * return PreparedStatement        * @throws Exception         */        public static PreparedStatement getPreStatementFromPro(String sql) throws         Exception{            return getConnectionFromPro().prepareStatement(sql);        }                /**        * return Query ResultSet        * @throws Exception         */        public static ResultSet getResultSetFromPro(String QuerySql) throws         Exception{            return getStatementFromPro().executeQuery(QuerySql);        }                /**        * return ResultSet List        */        public List<Object> getResultList(ResultSet res) {            List<Object> list = new ArrayList<Object>();            try {                ResultSetMetaData md = res.getMetaData();                int columnCount = md.getColumnCount();                while (res.next()){                    Map<Object, Object> rowData=new HashMap<Object,         Object>();                    for(int i=1;i<=columnCount;i++)                        rowData.put(md.getColumnName(i),         res.getObject(i));                    list.add(rowData);                }            } catch (SQLException e) {                e.printStackTrace();            }            return list;        }                /**        * return connection        *       Oracle:"oracle.jdbc.dirver.OracleDriver","jdbc:oracle:thin:@localhost:1521:DBName"        *       Sql:"com.microsoft.jdbc.sqlserver.SQLServerDriver","jdbc:sqlserver://localhost:1433      ;databaseName=数据库名"        * MySQL:"com.mysql.jdbc.Driver","jdbc:sybase:Tds:localhost:5007/erp "        * Sybase:"base.jdbc.SybDriver","jdbc:sybase:Tds:localhost:5007/erp "        * DB2:"com.ibm.db2.app.DB2Driver","jdbc:db2//localhost:5000/testDB"        * Hsql:"org.hsqldb.jdbcDriver","jdbc:hsqldb:hsql://localhost:9902"        *       Informix:"com.informix.jdbc.IfxDriver","jdbc:informixsqli://123.45.67.89:1533/myDB:      INFORMIXSERVER=myserver"        * PostgreSQL:"org.postgresql.Driver","jdbc:postgresql://localhost/testDB"        */        public static Connection getConnection(String driverName,String         dbUrl,String username,String password){            try {                Class.forName(driverName);                Properties properties=new Properties();                properties.put("username", username);                properties.put("password", password);                connection=DriverManager.getConnection(dbUrl,properties);            } catch (ClassNotFoundException e) {                e.printStackTrace();            } catch (SQLException e) {                e.printStackTrace();            }            return connection;        }                /**        * return ResultSet        *         * TABLE_CAT String => 表类别(可为 null)        * TABLE_SCHEM String => 表模式(可为 null)        * TABLE_NAME String => 表名称        * TABLE_TYPE String => 表类型。        * REMARKS String => 表的解释性注释        * TYPE_CAT String => 类型的类别(可为 null)        * TYPE_SCHEM String => 类型模式(可为 null)        * TYPE_NAME String => 类型名称(可为 null)        * SELF_REFERENCING_COL_NAME String => 有类型表的指定 "identifier" 列的名称(      可为 null)        * REF_GENERATION String        * SELF_REFERENCING_COL_NAME String => name of the designated "identifier"       column of a typed table (may be null)         * REF_GENERATION String => specifies how values in       SELF_REFERENCING_COL_NAME are created. Values are "SYSTEM", "USER", "DERIVED". (may       be null)         */        public static List<Object> getAllTablesInfo(Connection conn){            List<Object> list=new ArrayList<Object>();            ResultSet resTable=null;            try {                DatabaseMetaData dbMetaData=conn.getMetaData();                resTable=dbMetaData.getTables(conn.getCatalog(), null, "%",         null);                ResultSetMetaData rMetaData=resTable.getMetaData();                int table_count=rMetaData.getColumnCount();                while(resTable.next()){                    Map<Object, Object> map=new HashMap<Object,         Object>();                    for(int i=1;i<table_count;i++)                        map.put(rMetaData.getColumnName(i),         resTable.getString(i));                    list.add(map);                }            } catch (Exception e) {                e.printStackTrace();            }            return list;        }                /**        * return all tables name        */        public static List<Object> getAllTablesNmae(Connection conn){            List<Object> list=new ArrayList<Object>();            ResultSet resTable=null;            try {                DatabaseMetaData dbMetaData=conn.getMetaData();                resTable=dbMetaData.getTables(conn.getCatalog(), null, "%",         null);                while(resTable.next()){                    list.add(resTable.getString(3));                    /**                    * 元数据的列分别为:TABLE_CAT、TABLE_SCHEM、      TABLE_NAME、TABLE_TYPE、REMARKS                    */                }            } catch (Exception e) {                e.printStackTrace();            }            return list;        }                    /**        * @param <T>        * @param sql        * @param clazz        * @return        * @throws SQLException        * @throws Exception        * @throws IllegalAccessException        * @throws InvocationTargetException        */        public static <T> List <T> getResultList(String sql,Object[] params,         Class<T> clazz)                throws SQLException, Exception, IllegalAccessException,                InvocationTargetException {                Connection ct = null;                PreparedStatement ps = null;                ResultSet rs = null;                try {                    ct = getConnectionFromPro();                    ps = ct.prepareStatement(sql);                    for (int i = 0; i < params.length; i++){                        ps.setObject(i + 1, params[i]);                    }                    rs = ps.executeQuery();                    String[] colNames = getColNames(rs);                                    List<T> objects = new ArrayList<T>();                    Method[] methods = clazz.getMethods();                    while (rs.next()) {                        T object = clazz.newInstance();                        for (int i = 0; i < colNames.length; i++) {                            String colName = colNames[i];                            String methodName = "set" +         colName;                            for (Method m : methods) {                                if (methodName.equals        (m.getName())) {                                    m.invoke(object,         rs.getObject(colName));                                    break;                                }                            }                            objects.add(object);                        }                    }                    return objects;                } finally {                    close(rs, ps, ct);                }            }                        /**            * return all column name            */            public static String[] getColNames(ResultSet res) throws         SQLException {                ResultSetMetaData rsmd = res.getMetaData();                int count = rsmd.getColumnCount();                String[] colNames = new String[count];                for (int i = 1; i <= count; i++) {                    colNames[i - 1] = getUpper(rsmd.getColumnLabel(i));                }                return colNames;            }                                    private static String getUpper(String column){                return column.substring(0, 1).toUpperCase        ()+column.substring(1);            }                        /**            * return rows number            */            public static int getRowssNumber(ResultSet res){                int rows=0;                try {                    res.last();                    rows=res.getRow();                } catch (Exception e) {                    e.printStackTrace();                }                return rows;            }                        /**            */            public static <T> T getSingleResult(String sql,Object[] params,         Class<T> clazz) throws SQLException,                Exception, IllegalAccessException,         InvocationTargetException {                Connection ct = null;                PreparedStatement ps = null;                ResultSet rs = null;                try {                    ct = getConnectionFromPro();                    ps = ct.prepareStatement(sql);                                        for (int i = 0; i < params.length; i++){                        ps.setObject(i + 1, params[i]);                    }                                        rs = ps.executeQuery();                    String[] colNames = getColNames(rs);                                    T object = null;                    Method[] methods = clazz.getMethods();                    if (rs.next()) {                        object = clazz.newInstance();                         for (int i = 0; i < colNames.length; i++) {                            String colName = colNames[i];                            String methodName = "set" +         colName;                            for (Method m : methods) {                                if (methodName.equals        (m.getName())) {                                    m.invoke(object,         rs.getObject(colName));                                    break;                                }                            }                        }                    }                    return object;                } finally {                    close(rs, ps, ct);                }            }                                    /**            * @param rs            * @param st            * @param ct            */            public static void close(ResultSet res, Statement state, Connection         connection) {                try {                    if (res != null)                        res.close();                } catch (SQLException e) {                    e.printStackTrace();                } finally {                    try {                        if (state != null)                            state.close();                    } catch (SQLException e) {                        e.printStackTrace();                    } finally {                        if (connection != null)                            try {                                connection.close();                            } catch (Exception e) {                                e.printStackTrace();                            }                    }                }            }        }