首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在处理jdbc时关闭连接的最佳实践是什么?

在处理jdbc时关闭连接的最佳实践是什么?
EN

Stack Overflow用户
提问于 2017-08-08 10:54:48
回答 1查看 2.1K关注 0票数 0

我使用prepareStatement()来防止sql注入。现在我遇到的问题是,使用下面的方法,我可以执行getConnection().prepareStatement()然后构建我的查询,但是我需要尝试-捕捉对getConnection()的每一个调用并在finally块中关闭它。createStatement().execute()似乎更好一些,因为我可以让客户端传入查询,然后在一个地方处理尝试捕获,但这不会阻止sql注入。通常最好的做法是什么?或者是否有其他方法可以阻止sql注入来构建查询?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static Connection getConnection() throws SQLException, URISyntaxException {
    URI dbUri = new URI(System.getenv("DATABASE_URL"));

    String username = dbUri.getUserInfo().split(":")[0];
    String password = dbUri.getUserInfo().split(":")[1];
    String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath();

    return DriverManager.getConnection(dbUrl, username, password);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-08 11:14:00

我将使用连接池,而不是每次创建和关闭连接。

使用tomcat服务器创建连接池应遵循的几个步骤

步骤-1.使用数据库连接详细信息更新TOMCAT_ROOT_DIR\conf\server.xml文件,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version='1.0' encoding='utf-8'?>
...
  <GlobalNamingResources>
    ...
    <Resource name="jdbc/JCGExampleDB" 
              global="jdbc/JCGExampleDB"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              auth="Container"
              type="javax.sql.DataSource"              
              username="test"
              password="test"
              driverClassName="com.mysql.jdbc.Driver"
              description="JCG Example MySQL database."
              url="jdbc:mysql://localhost:3306/JCGExampleDB"
              maxTotal="10"
              maxIdle="10"
              maxWaitMillis="10000"
              removeAbandonedTimeout="300"            
              defaultAutoCommit="true" />
     ...
  </GlobalNamingResources>

步骤2:使用的JdbcTemplate -您可以编写数据库连接实用程序类并获得如下所示的连接(这个步骤可以通过多种方式完成)。类似于context.xml文件或web.xml文件或如下所示)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }

    @Bean
    public DataSource dataSource() {
        DataSource dataSource = new com.mchange.v2.c3p0.ComboPooledDataSource();
        try {
            JndiTemplate jndiTemplate = new JndiTemplate();
            dataSource = (DataSource)jndiTemplate.lookup("java:comp/env/jdbc/JCGExampleDB");
            } catch (NamingException e) {
            log.error("Unable to configure datasource: " + e.getStackTrace());
        }
        return dataSource;
    }

Edit1:使用单例类-没有JdbcTemplate:您可以在需要时从Singleton类获得连接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class DatabaseConnectionManager {

    DataSource ds;

    public void init() {
        InitialContext initialContext = new InitialContext();
        ds = (javax.sql.DataSource)initialContext.lookup("jdbc/JCGExampleDB");
    }

    public Connection getConnection() {
        if(ds == null) init();

        return ds.getConnection();
    }
}

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45576021

复制
相关文章
Spring对JDBC的最佳实践--上
在一开始,会介绍一下原生JDBC的使用,此时不会涉及到spring的使用,但是我们还是利用yml文件来存放数据源配置信息,因此我们需要一个yaml读取的工具类
大忽悠爱学习
2022/05/10
8500
Spring对JDBC的最佳实践--上
Node.js 服务连接 MongoDB 处理最佳实践
关于如何处理 node.js 服务连接 MongoDB,我查阅了大量中英文资料,发现并没有太适合我所期望的能力的方案,因此经过一番官方文档的研究,总结了以下的连接 MongoDB 的方法(使用目前 Node.js 平台最常用的 MongoDB ODM mongoose),斗胆称之为『最佳实践』,希望能够抛砖引玉,得到大家更专业的解答。 话不多说,先上代码:
逆葵
2019/04/25
3.5K0
jdbc自带MySQL连接池实践
在上期文章自定义MySQL连接池中,我提到了没找到一个特别合适的MySQL连接池实现,所以自己写了一个基于通用池化框架commons-pool2的MySQL连接池,并且模仿了Go语言的gorm框架设计思路,把借和还的操作不暴露给用户,只处理用户发来的SQL语句的思路,封装了一个com.funtester.db.mysql.MysqlPool。
FunTester
2022/12/09
2.1K0
jdbc自带MySQL连接池实践
Go Error 的处理最佳实践
这给程序 debug 带来了一些麻烦,因此我们会使用 github.com/pkg/errors 来替代原生 errors 包来处理 Error。
颇忒脱
2022/11/21
5710
5. JDBC工具类的抽取 - 封装获取连接、关闭资源
在前面的篇章中,我使用了 Statement 完成 JDBC 增删改查,而且我们可以发现在代码中,存在代码重复的地方,例如:获取数据库连接、关闭资源。
Devops海洋的渔夫
2022/01/17
8360
5. JDBC工具类的抽取 - 封装获取连接、关闭资源
Java异常处理最佳实践
在Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费Java
Java架构师必看
2021/07/15
7580
处理回归BUG最佳实践
上期讲到回归BUG,本文将讨论一些回归测试的最佳实践和方法,它们将有助于处理回归BUG。
FunTester
2020/11/09
5530
JAVA 中异常处理的最佳实践
前言 异常处理的问题之一是知道何时以及如何去使用它。我会讨论一些异常处理的最佳实践,也会总结最近在异常处理上的一些争论。 作为程序员,我们想要写高质量的能够解决问题的代码。但是,异常经常是伴随着代码产生的副作用。没有人喜欢副作用,因此我们会试图用自己的方式来解决这个问题。我看过不少的程序用下面的方法应对异常: public void consumeAndForgetAllExceptions(){ try { ...some code that throws exceptions
前端教程
2018/03/05
1.7K0
JAVA 中异常处理的最佳实践
Java 中处理 Exception 的最佳实践
在Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些规则来规范对异常的处理的原因。而团队之间的这些规范往往是截然不同的。本文给出几个被很多团队使用的异常处理最佳实践。
Java编程指南
2019/08/02
4750
腾讯云最佳实践-在腾讯云和AzureChina之间建立VPN连接
文章介绍:在两个公有云之间建议VPN连接,保证了公有云之间流量传输走内网走,增强了网络安全性,减少了攻击面
root0day
2022/11/25
8.6K0
处理网络超时问题的最佳实践
对于云上的用户来说,业务日志里面报超时问题处理起来往往比价棘手,因为1) 问题点可能在云基础设施层,也有可能在业务软件层,需要排查的范围非常广;2) 这类问题往往是不可复现问题,抓到现场比较难。在本文里就分析下如何来分辨和排查这类问题的根本原因。
JavaQ
2019/05/17
3.1K0
Jenkins 在 Kubernetes 上的最佳实践
Jenkins 是由 Java 编写的编排引擎,在 Full GC 时会 Stop The World(STW)。在大规模构建时,STW 可能会导致 Jenkins 无法处理新的请求。
陈少文
2021/06/05
1.1K0
session在浏览器关闭时进行何处理?以及回收机制
Session会话机制被广泛应用在JSP、ASP、PHP等语言中。一般用来储存登陆状态或者其他的一些需要验证权限的状态。 以下类似代码在每个系统里应该都会存在
宣言言言
2019/12/18
1.2K0
MySQL的JDBC连接
JDBC 是 Java Database Connective的缩写,表示使用Java去连接数据库进行数据操作的过程
全栈程序员站长
2022/09/09
3.3K0
大厂日期时间处理最佳实践
以声明时间戳、使用日历处理日期和格式化解析日期时间。但这些类的API可读性差、使用繁琐,且非线程安全,如同设计的翔一样的IO,也是Java让人诟病的一大原因。
JavaEdge
2021/02/23
1.3K0
大厂日期时间处理最佳实践
NodeJS错误处理最佳实践
NodeJS的错误处理让人痛苦,在很长的一段时间里,大量的错误被放任不管。但是要想建立一个健壮的Node.js程序就必须正确的处理这些错误,而且这并不难学。如果你实在没有耐心,那就直接绕过长篇大论跳到“总结”部分吧。
竹清
2018/08/31
1.6K0
NodeJS错误处理最佳实践
java连接数据库时jdbc设置编码
发现网上很多坑爹货,有很多意思表达不全,比如jdbc连接mysql数据库的时候,设置字符集编码
执笔记忆的空白
2020/12/25
3K0
Java 处理 Exception 的 9 个最佳实践!
不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。
趣学程序-shaofeer
2020/05/18
4360
进行JDBC操作时,连接参数的配置(附DBUtil工具类)
JDBC连接时,两种常见的地址书写 1、jdbc连接oracle数据库 driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@127
时间静止不是简史
2020/07/24
1.7K0
进行JDBC操作时,连接参数的配置(附DBUtil工具类)
9种处理Java异常的最佳实践
Java中的异常处理是个不简单的话题。初学者很难理解,即使是经验丰富的开发人员也可以花费数小时来讨论如何以及应该抛出或处理哪些异常。
田维常
2021/03/16
4670

相似问题

关闭sql连接的最佳实践是什么?

12

关闭ftp连接的最佳实践是什么?

10

关闭jdbc结果集的最佳实践

11

JDBC连接/结果集/语句的最佳实践是什么

51

池化配置单元JDBC连接的最佳实践是什么

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文