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

1. 使用PrearedStatement

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

2. 使用ConnectionPool(连接池)

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

3. 禁用自动提交

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

4. 使用Batch Update

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

5. 使用列名获取ResultSet中的数据,从而避免invalidColumIndexError

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

6. 使用变量绑定而不是字符串拼接

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

7. 要记住关闭Statement、PreparedStatement和Connection

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

8. 选择合适的JDBC驱动

有四种JDBC驱动,分别是

  1. JDBC-ODBC Bridge driver (bridge driver)

  2. Native-API/partly Java driver (native driver)

  3. AllJava/Net-protocol driver (middleware driver)

  4. All Java/Native-protocol driver (Pure java driver)

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

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

10. 使用正确的getXXX()方法

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

十个 JDBC 的最佳实践的更多相关文章

  1. 开涛spring3(7.5) - 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践

    7.5 集成Spring JDBC及最佳实践 大多数情况下Spring JDBC都是与IOC容器一起使用.通过配置方式使用Spring JDBC. 而且大部分时间都是使用JdbcTemplate类(或 ...

  2. Spring JDBC最佳实践(1)

    原文地址:https://my.oschina.net/u/218421/blog/38513 Spring提供了两种使用JDBC API的最佳实践,一种是以JdbcTemplate为核心的基于Tem ...

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

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

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

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

  5. RESTful API的十个最佳实践

    WebAPI在过去几年里非常的盛行,我们很多以往的技术手段都慢慢的转换为使用WebAPI来开发,因为它的语法简单规范化,以及轻量级等特点,这种方式收到了广泛的推崇. 通常我们使用RESTFul(Rep ...

  6. 吴太银:华为消费者云服务Cassandra使用场景与最佳实践

    大家好,我是华为消费者云的吴太银. 我今天分享的主要是华为消费者云服务使用Cassandra的应用场景和最佳实践.我这个可能跟其他嘉宾分享的不太一样,因为前几个嘉宾讲的实际上对Cassandra原生的 ...

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

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

  8. [转]10个有关RESTful API良好设计的最佳实践

    Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的. 通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GE ...

  9. Atitit.guice3 ioc 最佳实践 o9o

    Atitit.guice3 ioc  最佳实践 o9o 1. Guice的优点and跟个spring的比较 1 2. 两个部分:::绑定and注入@Inject 1 3. 绑定所有的方法总结 2 3. ...

随机推荐

  1. hdu 1711 Number Sequence 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目意思:给出一条有n个数的序列a[1],a[2],......,a[n],和一条有m 个数的序 ...

  2. POJ 1236 Network of Schools (校园网)

    Description 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意如果 B 在 A 学校的分发列表中,那么 A 不必也在 B 学校的 ...

  3. Asp与Asp.Net

    1.Asp是什么? ASP是动态服务器页面(Active Server Page)的英文缩写.是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具 ...

  4. C++中volatile及编译器优化

    首先看一下单词"volatile"的释义: volatile [ˈvɑlətl] adj.  易变的,不稳定的; (液体或油)易挥发的; 爆炸性的; 快活的,轻快的; 下边是&qu ...

  5. I.MX6 Android /data 目录内容

    /**************************************************************************** * I.MX6 Android /data ...

  6. Caused by: Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar

    转自:https://blog.csdn.net/u011422744/article/details/39851693 在SSH开发,搭建环境的时候,启动tomcat服务器,就报这个异常! 信息: ...

  7. Gym 100962G Green Day (找规律)

    题意:你用k 个生成树构成一个完全图. 析:n 个点的完全图有n(n-1)/2个边,一个生成树有n-1个边,你有k 个生成树 即边数等于 K(n-1) ,即  n(n-1)/2 == k(n-1)   ...

  8. Codeforces - 814B - An express train to reveries - 构造

    http://codeforces.com/problemset/problem/814/B 构造题烦死人,一开始我还记录一大堆信息来构造p数列,其实因为s数列只有两项相等,也正好缺了一项,那就把两种 ...

  9. Windows 下openssl安装与配置

    编译thirift失败 网上方法很多,大部分是针对32位机的,自己的电脑因为是win7,64位,摸索了很久才安装成功. 环境 WIN7, 64位, vs2005 下载ActivePerl 配置过程中需 ...

  10. python __builtins__ license类 (41)

    41.'license', 许可证,执照 class _Printer(builtins.object) | interactive prompt objects for printing the l ...