alibaba.druid 数据库连接池工具类封装

alibaba.druid 数据库连接池工具类封装

封装后用法

DruidContext dc = new DruidContext();
                dc.initDataStore(cds);
                eContext.sdedb=dc;
String wktNew=this.sdedb.transform("SRID="+srid+";"+wkt,toSRID);

DruidContext 工具类封装

package com.puri.pg.gis.geoprocess;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.puri.pg.common.data.DbConfig;
import com.puri.pg.common.utils.JsonResult;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;

import javax.sql.DataSource;
import java.io.Closeable;
import java.sql.*;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * 定义:alibaba.druid 数据库连接池 工具类
 * create date:2023-03-16
 * modify date:2023-03-31
 * vp:hsg
 */

public class DruidContext  {
    
    
    public static final String driverClassName_mysql="com.mysql.cj.jdbc.Driver";
    public static final String driverClassName_postgresql="org.postgresql.Driver";
    public static final String driverClassName_oracle="oracle.jdbc.driver.OracleDriver";
    public static final String driverClassName_sqlserver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
    private static DataSource dataSource;
    private static DruidContext m_Instance=new DruidContext();
    //获取jdbcTemplate模板类
    private static JdbcTemplate jdbcTemplate=null;

    public static DruidContext getInstance()
    {
    
    
        return m_Instance;
    }
    public static void setInstance(DruidContext dc)
    {
    
    
        m_Instance=dc;
    }

    /*
     * 读取配置文件
     * */
    public DruidContext() {
    
    

    }
    public void initDataStore(DbConfig cds)
    {
    
    
        if(getInstance().dataSource==null) {
    
    
            try {
    
    
                lock.writeLock().lock();
                if(getInstance().dataSource==null) {
    
    
                    //数据源配置
                    Properties prop = new Properties();
                    switch (cds.getDbType()) {
    
    
                        case "postgis":
                            prop.put("driverClassName", driverClassName_postgresql);
                            break;
                        case "postgresql":
                            prop.put("driverClassName", driverClassName_postgresql);
                            break;
                        case "mysql":
                            prop.put("driverClassName", driverClassName_mysql);
                            break;
                        case "oracle":
                            prop.put("driverClassName", driverClassName_oracle);
                            break;
                        case "sqlserver":
                            prop.put("driverClassName", driverClassName_sqlserver);
                            break;
                        default:
                            prop.put("driverClassName", driverClassName_postgresql);
                            break;
                    }
                    prop.put("url", cds.getUrl());
                    prop.put("username", cds.getUsername());
                    prop.put("password", cds.getPassword());
                    //
                    prop.put("initialSize", "2");
                    prop.put("maxActive", "20");
                    prop.put("maxWait", "10000");
                    //返回的是DataSource
                    getInstance().dataSource = DruidDataSourceFactory.createDataSource(prop);
                    getInstance().jdbcTemplate = new JdbcTemplate(dataSource);
                }
            } catch (Exception e) {
    
    
                e.printStackTrace();
            }
            finally {
    
    
                lock.writeLock().unlock();
            }
        }
    }

    public void close() throws Exception
    {
    
    
        if(getInstance().dataSource!=null)
        {
    
    
            Closeable c=(Closeable)getInstance().dataSource;
            if(c!=null)
            {
    
    
                c.close();
            }
            getInstance().dataSource = null;
        }
    }


    /**获取连接*/
    public Connection getConnection() throws Exception{
    
    
        Connection conn = null;
        try {
    
    
            conn = getInstance().dataSource.getConnection();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
        return conn;
    }
    /**关闭资源*/
    public static void closeResoure (Connection conn, PreparedStatement ps){
    
    
        try {
    
    
            if(ps!=null) {
    
    
                ps.close();
            }
        } catch (SQLException throwables) {
    
    
            //
            throwables.printStackTrace();
        }
        try {
    
    
            if(conn!=null) {
    
    
                conn.close();
            }
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }
    }

    public Object queryForObject(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, String.class);
        if (obj != null) {
    
    
            return obj;
        }
        return null;
    }

    public String queryForString(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, String.class);
        if (obj != null) {
    
    
            return (String) obj;
        }
        return "";
    }

    public Long queryForLong(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, Long.class);
        if (obj != null) {
    
    
            return (Long) obj;
        }
        return 0L;
    }

    public Integer queryForInt(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, Integer.class);
        if (obj != null) {
    
    
            return (Integer) obj;
        }
        return 0;
    }

    public Double queryForDouble(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, Double.class);
        if (obj != null) {
    
    
            return (Double) obj;
        }
        return 0D;
    }

    public Date queryForDate(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, Date.class);
        if (obj != null) {
    
    
            return (Date) obj;
        }
        return null;
    }

    public Timestamp queryForTimestamp(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, Timestamp.class);
        if (obj != null) {
    
    
            return (Timestamp) obj;
        }
        return null;
    }

    public Boolean queryForBoolean(String sql) {
    
    
        Object obj = getInstance().jdbcTemplate.queryForObject(sql, Boolean.class);
        if (obj != null) {
    
    
            return (Boolean) obj;
        }
        return null;
    }

    public List<String> queryForList(String sql) {
    
    
        return getInstance().jdbcTemplate.queryForList(sql, String.class);
    }

    public SqlRowSet queryForRowSet(String sql) {
    
    
        return getInstance().jdbcTemplate.queryForRowSet(sql);
    }

    public void execute(String sql) {
    
    
        getInstance().jdbcTemplate.execute(sql);
    }

    //----
    //封装GIS公共函数
    public String difference(String wkt,String wkt2) {
    
    
        String sql = "select ST_AsEWKT(ST_Difference('" + wkt + "','" + wkt2 + "')) as wkt_geo";
        return this.queryForString(sql);
    }
    public String union(String wkt, String wkt2) {
    
    
        String sql = "select ST_AsEWKT(ST_Union('" + wkt + "','" + wkt2 + "')) as wkt_geo";
        return  this.queryForString(sql);
    }
    public String geohash(String wkt) {
    
    
        String sql = "select ST_GeoHash('" + wkt + "') as wkt_geohash";
        return  this.queryForString(sql);
    }
    public String transform(String wkt,Integer toSRID)
    {
    
    
        String geom="st_geomfromewkt('"+wkt+"')";
        String sql="select st_asewkt(st_transform("+geom+"," + toSRID + ")) as wkt_transform";
        return  this.queryForString(sql);
    }
}

猜你喜欢

转载自blog.csdn.net/hsg77/article/details/129885842
今日推荐