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);
}
}