美国上市公司,专注Java培训21年

JDBC总结的十个实践


JDBC总结的十个最佳时间

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 方法,这样可以避免数据类型转换。

感谢大家阅读由java培训机构分享的“JDBC总结的十个实践”希望对各位学员有所帮助,更多精彩内容请关注Java培训官网


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • java语言中,char 类型变量是否能保存一个汉字?
    java语言中,char 类型变量是否能保存一个汉字?
    在 Java 语言中,可以使用 char 类型的变量来存储单个的字符,请问是否能用 char 类型的变量来存储一个汉字呢? 详情>>

    2015-10-15

  • 有史以来最牛的一张程序员职业路线图!
    有史以来最牛的一张程序员职业路线图!
    最近在琢磨程序员到底路在何方,经过不断的自虐和代入,终于在迷雾森林中得图一张,看之豁然开朗。独乐乐不如众乐乐,share了: 详情>>

    2018-05-22

  • java中变量和常量有什么区别?
    java中变量和常量有什么区别?
    在使用 Java 语言进行程序设计时,经常需要用到常量和变量来存储信息。请简单叙述变量和常量有什么区别? 详情>>

    2015-10-15

  • short 和 char 类型的取值范围各是多少?
    short 和 char 类型的取值范围各是多少?
    在使用 Java 语言进行程序设计时,经常需要使用 short 型和 char 型存储数值,请简述short 型和 char 型的取值范围各是多少? 详情>>

    2015-10-15

  • Java开班时间

    收起