JDBC是Java为多种关系型数据库提供的统一的访问接口,以下是我长期使用JDBC总结的十个最佳实践。

JDBC最佳实践1:使用PrearedStatement

任何一个使用过JDBC的Java程序员几乎都知道这个,PreparedStatment可以通过预编译的方式避免我们在拼接SQL时造成SQL注入。

JDBC最佳实践2、使用ConnectionPool(连接池)

使用连接池作为最佳实践几乎都成了公认的标准。一些框架已经提供了内建的连接池支持,例如Spring中的Database Connection Pool,如果你的应用部署在JavaEE的应用服务器中,例如JBoss,WAS,这些服务器也会有内建的连接池支持,例如DBCP。使用连接的原因简 单的说就是因为创建JDBC连接耗时比较长,如果每次查询都重新打开一个连接,然后关闭,性能将会非常低,而如果事先创建好一批连接缓存起来,使用的时候 取出,不使用的时候仍不关闭,将会节省大量的创建关闭连接的时间。

JDBC最佳实践3、禁用自动提交

这个最佳实践在我们使用JDBC的批量提交的时候显得非常有用,将自动提交禁用后,你可以将一组数据库操作放在一个事务中,而自动提交模式每次执行SQL语句都将执行自己的事务,并且在执行结束提交。

JDBC最佳实践4、使用Batch Update

JDBC的API提供了通过addBatch()方法向batch中添加SQL查询,然后通过executeBatch()执行批量的查询。JDBC batch update可以减少数据库数据传输的往返次数,从而提高性能。

JDBC最佳实践5:使用列名获取ResultSet中的数据,从而避免invalidColumIndexError

JDBC中的查询结果封装在ResultSet中,我们可以通过列名和列序号两种方式获取查询的数据,当我们传入的列序号不正确的时候,就会抛出 invalidColumIndexException,例如你传入了0,就会出错,因为ResultSet中的列序号是从1开始的。另外,如果你更改了 数据表中列的顺序,你也不必更改JDBC代码,保持了程序的健壮性。有一些Java程序员可能会说通过序号访问列要比列名访问快一些,确实是这样,但是为 了程序的健壮性、可读性,我还是更推荐你使用列名来访问。

JDBC最佳实践6:使用变量绑定而不是字符串拼接

在第一条最佳实践中,我们已经说过要使用PreparedStatment可以防止注入,而使用?或者其他占位符也会提升性能,因为这样数据库就可以使用不同的参数执行相同的查询,这个最佳实践带来更高的性能的同时也防止了SQL注入。

JDBC最佳实践7:要记住关闭Statement、PreparedStatement和Connection

通常的做法是在finally块中关闭它们,这样做的好处是不论语句执行正确与否,不管是否有异常抛出,都能保证资源被释放。在Java 7中,可以通过Automatic Resource Management Block来自动的关闭资源。

JDBC最佳实践8:选择合适的JDBC驱动

有四种JDBC驱动,分别是

  • 第一种JDBC驱动叫做JDBC-ODBC Bridge driver (bridge driver)
  • 第二种JDBC驱动叫做Native-API/partly Java driver (native driver)
  • 第三种JDBC驱动叫做AllJava/Net-protocol driver (middleware driver)
  • 第四种JDBC驱动叫做All Java/Native-protocol driver (Pure java driver)

JDBC最佳实践9:尽量使用标准的SQL语句,从而在某种程度上避免数据库对SQL支持的差异

不同的数据库厂商的数据库产品支持的SQL的语法会有一定的出入,为了方便移植,我推荐使用标准的ANSI SQL标准写SQL语句。

JDBC最佳实践10:使用正确的getXXX()方法

当从ResultSet中读取数据的时候,虽然JDBC允许你使用getString()和getObject()方法获取任何数据类型,推荐使用正确的getter方法,这样可以避免数据类型转换。

转载于:https://www.cnblogs.com/Lightning-Kid/p/3296509.html

十个JDBC的最佳实践相关推荐

  1. 【转】Java中关于异常处理的十个最佳实践

    原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 ...

  2. flink mysql connector_Flink JDBC Connector:Flink 与数据库集成最佳实践

    整理:陈政羽(Flink 社区志愿者) 摘要:Flink 1.11 引入了 CDC,在此基础上, JDBC Connector 也发生比较大的变化,本文由 Apache Flink Contribut ...

  3. 十个书写Node.js REST API的最佳实践(上)

    收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...

  4. Flink JDBC Connector:Flink 与数据库集成最佳实践

    整理:陈政羽(Flink 社区志愿者) 摘要:Flink 1.11 引入了 CDC,在此基础上, JDBC Connector 也发生比较大的变化,本文由 Apache Flink Contribut ...

  5. 干货丨金仓JDBC读写分离介绍和最佳实践

    背景和目的 当前业务系统面临的业务压力越来越大,单节点已经难以满足现在和未来的业务需求.因此市面上出现了很多的解决方案,其中就包括读写分离集群.读写分离通过备机读负载均衡,降低主机上读负载,以此提高整 ...

  6. Mendix性能最佳实践

    目录 1. 简介 2. 计算属性的最佳实践[MXP001][MXP002] 2.1 在页面中避免使用计算属性[MXP001] 2.1.1 修复步骤 2.2 删除未使用的计算属性[MXP002] 2.2 ...

  7. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  8. Cassandra数据模型设计最佳实践

    2019独角兽企业重金招聘Python工程师标准>>> 本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使用Cassandra数据模型设计的一些实践.其 ...

  9. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  10. 调优 DB2 UDB v8.1 及其数据库的最佳实践-IBM developerWorks

    http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/dm-0404mcarthur/#sqltuning 级别: 初级 ...

最新文章

  1. python爬虫教程i-Python 爬虫速成教程,还有35个实战项目送给你!
  2. df.where(dfmask, targetValue)展示
  3. springboot启动时An attempt was made to call a method that does not exist
  4. MongoDB之Hadoop驱动介绍
  5. 2016年华为网络技术精英大赛复赛试题
  6. mysql志新计划,在使用Perl DBI迭代结果集时更新MySQL表是否安全?
  7. python随机图片api_抓取随机图片
  8. 请求发送者与接收者解耦——命令模式(三)
  9. SpringMVC+Spring Data JPA实现增删改查操作
  10. 编译原理——NFA确定化和DFA最小化
  11. VMware Workstation 14 Pro 安装 Windows Server 2008 R2(完)
  12. 基于89C51单片机的智能小车——06.测速小车
  13. 【微信技术-微信小程序】------- 渐进式骨架屏(加载流)(第二篇)
  14. SQL SERVER 读取数据库中所有表名
  15. matlab中如何输入积分,在matlab中怎么输入特殊符号,Matlab的符号积分
  16. er到底是不是复韵母
  17. Jupyter notebook 创建新笔记本出错
  18. SSL数字证书到期之后该怎么做?
  19. 万年历公里c语言编程,C语言实现万年历源码
  20. 李炎恢的bootstrap项目实战首页内容下思路解析

热门文章

  1. PHP报错:Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars
  2. macos 10.15.2 iso镜像网盘下载
  3. 说说自动学习,是什么样的境界和体验
  4. 软件基本功:start()不能作为函数名,可以作为类方法名
  5. 获取Activity当前屏幕方向。
  6. C编译中如何向代码中传递一个预定义字串
  7. 管理感悟:看清软件功能的“二八定律”
  8. NWT创业失败原因之层层分析
  9. 朴素版prim算法求最小生成树
  10. C# 一次性获取二维数组中的一维数组数据