首页 > 数据库 >jdbc结合druid连接池访问postgreSQL数据库

jdbc结合druid连接池访问postgreSQL数据库

时间:2024-04-11 10:11:06浏览次数:18  
标签:jdbc postgreSQL String druid preparedStatement sql close null conn

jdbc结合druid连接池访问postgreSQL数据库

连接mysql的话也是一个道理,就是把对应的依赖和数据库驱动换一下

一. 在pom.xml里面加上对应的依赖

       <!-- druid数据源 -->
       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>

       <!-- Spring Boot JDBC -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

       <!-- Spring Boot JDBC -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>

二. 新建个配置文件postgre.properties

注:该文件放在resources目录下,否则下面的工具类里面引用的话得加上相对路径

driverClassName=org.postgresql.Driver
url: jdbc:postgresql://192.163.25.66:5432/yzstreetdp
username: postgres
password: 123456
initialSize=50
maxActive=300
maxWait=3000

三. 工具类JDBCPostGreUtils

package com.loit.common.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * @ClassName JDBCPostGreUtils
 * @Description jdbc工具类
 * @Author lifh
 * @Date 2024/4/2 14:58
 * @Version 1.0
 */

public class JDBCPostGreUtils {
    // 连接池
    private static DataSource ds = null;

    // 获取双列集合
    private static Properties properties = new Properties();

    static {
        Properties pro = new Properties();
        InputStream is = JDBCPostGreUtils.class.getClassLoader().getResourceAsStream("postgre.properties");
        try {
            pro.load(is);
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static Connection getConnection()  {


        // 定义返回值
        Connection conn = null;

        try {
            conn = ds.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }


        // 返回连接对象
        return conn;
    }

    // 关闭连接对象
    public static void close(Connection conn){
        // 判断连接对象是否为空
        if (conn == null){
            return;
        }

        try {
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    // 关闭连接对象和执行者
    public static void close(Connection conn, Statement stmt){

        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        close(conn);

    }

    // 关闭连接对象和执行者
    public static void close(Connection conn, Statement stmt, ResultSet rs){
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        close(conn,stmt);

    }


}

四. 测试类中进行测试

    /**
     * 获取车辆关联道路
     * 地图接口
     * @param lat
     * @param lon
     * @param layerList   作业图层  6/7/10
     * @return
     */
     @Test
    public JSONObject getRoadName(Double lat, Double lon, List<Integer> layerList) throws SQLException {
        String temp = "";
        if (layerList.get(0) == 6){  //清扫
            temp = "AND is_clean_road = '1'";
        }else if(layerList.get(0) == 7){ //洒水
            temp = "AND is_watering_road = '1'";
        }else if(layerList.get(0) == 10){  //洗地
            temp = "AND is_washing_road = '1'";
        }
        String sql = String.format("SELECT\n" +
                "\tobjectid,\n" +
                "\troad_name,\n" +
                "\tst_distance ( ( ST_Transform ( st_geometryfromtext ( 'POINT(%s %s)', 4326 ), 3857 ) ), ST_Transform ( geometry, 3857 ) ) \n" +
                "FROM\n" +
                "\t\"polyline_grid\" \n" +
                "WHERE\n" +
                "\tobjectid IN (\n" +
                "\tSELECT\n" +
                "\t\tobjectid \n" +
                "\tFROM\n" +
                "\t\t(\n" +
                "\t\tSELECT\n" +
                "\t\t\tST_Contains ( ST_Buffer ( ST_Transform ( geometry, 3857 ), ? ), ST_Transform ( st_geometryfromtext ( 'POINT(%s %s)', 4326 ), 3857 ) ),* \n" +
                "\t\tFROM\n" +
                "\t\t\tpolyline_grid \n" +
                "\t\t) polyline_result \n" +
                "\tWHERE\n" +
                "\t\tpolyline_result.ST_Contains = 't'\n" +
                "\t\t %s \n" +
                "\t) \n" +
                "ORDER BY\n" +
                "\tst_distance \n" +
                "\tLIMIT 1;",lon,lat,lon,lat,temp);
        logger.info("获取车辆关联道路sql: "+sql);
        Connection conn = JDBCPostGreUtils.getConnection();
        PreparedStatement preparedStatement;
        preparedStatement = conn.prepareStatement(sql);
        preparedStatement.setInt(1,BUFFER_LENGHT);
        ResultSet rs = preparedStatement.executeQuery();
        String layerId = null;
        String roadName = null;
        String distance = null;
        while(rs.next()){
            layerId = rs.getString(1);
            roadName = rs.getString(2);
            distance = rs.getString(3);
            System.out.println("layerId--" + layerId);
            System.out.println("roadName-" + roadName);
        }
        logger.info("获取车辆关联道路返回layerId: "+layerId);
        logger.info(String.format("获取车辆关联道路返回layerId:%s,roadName:%s,距离:%s",layerId,roadName,distance));
        // 关闭资源
        JDBCPostGreUtils.close(conn, preparedStatement, rs);
        String strJson = String.format("{\n" +
                "\t\"code\": 200,\n" +
                "\t\"data\": {\n" +
                "\t\t\"polylineId\": %s\n" +
                "\t}\n" +
                "}",layerId);

        return JSONUtil.parseObj(strJson);
    }



    /**
     * 根据图层和layerid更新某条道路状态
     * 地图接口
     * @param polylineId   图层6/7/10
     * @param geojsonId    道路的layerId
     * @param state        状态1/2/3
     * @return
     */
    @Test
    public void layerUpdate(int polylineId, int geojsonId, int state){
        String temp = "";
        if (polylineId == 6){  //清扫
            temp = "is_clean_status";
        }else if(polylineId == 7){ //洒水
            temp = "is_watering_status";
        }else if(polylineId == 10){  //洗地
            temp = "is_washing_status";
        }
        String sql = String.format("UPDATE polyline_grid set %s=? where objectid= ?",temp);
        logger.info("更新图层sql: "+sql);
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        try {
            conn = JDBCPostGreUtils.getConnection();
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setInt(1,state);
            preparedStatement.setString(2,String.valueOf(geojsonId));
            int i = preparedStatement.executeUpdate();
            logger.info("更新总数: "+i);
        } catch (SQLException e) {
            logger.info("更新图层失败"+e);
            throw new RuntimeException(e);
        } finally {
            // 关闭资源
            JDBCPostGreUtils.close(conn,preparedStatement, null);
        }

    }


标签:jdbc,postgreSQL,String,druid,preparedStatement,sql,close,null,conn
From: https://www.cnblogs.com/lfh-blog/p/18128206

相关文章

  • 用postgresql做抽样查询
    9.5之前需要写函数,暂不考虑,下面以tablesample方法为主方式一:在数据量较小的情况下使用select*fromtb_defectorderbyrandom()limit100缺点是没办法再排序,而且是全表扫描,性能较差方式二:select*fromtb_defecttablesamplesystem(0.01);system抽样方式是随机抽取表......
  • postgresql中查询COMMENT注释的语句
    tb_car表中DDL语句中有COMMENTCOMMENTONCOLUMNpublic.tb_car.car_idIS'主键';COMMENTONCOLUMNpublic.tb_car.car_index_codeIS'车辆编码';COMMENTONCOLUMNpublic.tb_car.plate_noIS'车牌号码';用如下语句查询SELECTcol.table_name,col.column_na......
  • openGauss数据与PostgreSQL的差异对比
    openGauss数据与PostgreSQL的差异对比前言openGauss数据库已经发布2.0.1版本了,中启乘数科技是一家专业的专注于极致性能的数据库服务提供商,所以也关注openGauss数据库的特性。因为openGauss是从PostgreSQL发展出来的,所以我们详细讲解对比一下openGauss与原生Po......
  • (二)PostgreSQL常用的配置文件
    PostgreSQL常用的配置文件1postgresql.conf参数文件postgresql.conf是PostgreSQL数据库的主要配置文件,用于控制数据库实例的行为和特性,一般在$PGDATA目录下。这个文件包括了众多的配置选项,比如内存使用限制、连接设置、日志记录规则等。根据系统资源和应用需求对这些......
  • java连接Oracle(JDBC)
    packagetext.coming;importjava.sql.*;publicclassdemo{publicstaticvoidmain(String[]args){Connectionct=null;Statementstatement=null;try{Class.forName("oracle.jdbc.driver.OracleDriver");......
  • postgresql 截取第二个特定字符
    在开发PostgreSQL数据库应用程序时,经常需要在查询语句中截取字符串。在某些情况下,需要截取字符串中的特定字符。例如,从URL中获取域名,从文本中获取文件名等。本文将介绍如何在PostgreSQL中截取字符串中的第二个特定字符。我们将使用SUBSTRING和POSITION函数来实现这一目......
  • PostgreSQL 将分组后的字段合并成一个 JSON 对象
    在PostgreSQL数据库中,有时需要将分组后的字段合并成一个JSON对象,并将其保存到一个新的字段中。本文将介绍如何使用PostgreSQL中的json_agg函数来实现这一目标。假设我们有一个销售订单表格,其中包含订单编号、产品名称和销售数量等字段。现在我们需要按照订单编号分组,并将......
  • PostgreSQL中json_build_object的用法
    在PostgreSQL数据库中,有时我们需要将多个字段合并成一个JSON对象,并将其用于保存或传输数据。json_build_object函数可用于将指定的键值对合并为一个JSON对象。该函数的语法如下:sqljson_build_object(keytext,valueany[,...])其中,key是JSON对象中的键名,可以是......
  • postgresql通过explain命令查看查询性能
    explain(ANALYZE,VERBOSE,BUFFERS)selectc.*fromtb_classificationcleftjointb_operate_logoonc.id=o.object_idwhere1=1andc.parent_code='root000000'ando.operate_type>=0ando.idin(selectmax(so.id)fromtb_operate_logsogroup......
  • JDBC驱动连接MogDB/opengauss
    JDBC驱动连接MogDB/opengauss一、环境说明[root@node1~]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)[root@node1ext]#java-versionjavaversion"1.8.0_301"Java(TM)SERuntimeEnvironment(build1.8.0_301-b09)JavaHotSpot(TM)64-Bit......