Java Enterprise 最佳实践 读书笔记
JDBC 最佳实践
1. 使用PreparedStatement
理由:
(1) 使用pstmt能使得sql代码的可读性更好
(2) 使用pstmt能防止SQL注入,比如其中一个参数带有单引号之类的.
(3) 一般而言,相对于Statement, pstmt的性能要更好,特别是在同一查询会进行多次的时候, 但是需要底层数据库支持这个”预编译语句”的特性.
[就其pstmt跟stmt的性能对比而言,在现在的JDBC中,只要不是很多,我认为还是statement的效率会更好.可以参看其他网友的帖子, 我参考了http://onjava.com/pub/a/onjava/excerpt/oraclejdbc_19/index.html?page=1 从这一页最下面的一个小节看起即可]
补充:
(1) 在JDBC中,有三类语句,分别是Statement, PreparedStatement, CallableStatement. 首先,在阿里巴巴的笔试题中就出现过选择哪个不是JDBC中的语句类型的题目, 所以这个知识点应该熟悉. 另外就是, 第三个类型的Statement, 是一个基于存储过程的语句. 在实际编程中, 还是应该尽量使用PreparedStatement, 但是对于较复杂的操作, 可以先使用PreparedStatement, 然后分析出性能瓶颈, 再将该部分转换为存储过程, 使用CallableStatement. 另外,存储过程允许DBA处理数据库逻辑, 允许程序员使用所谓的hook钩子函数, 但是千万不能把业务逻辑放到存储过程之中.
(2) 充分使用PreparedStatement池
[按照我的理解以及从http://www.ibm.com/developerworks/java/library/j-jdbcnew/ 看到的资料, 我认为要想从pstmt池取pstmt, Connection本身也需要在一个池子里面. 这个实践就有点像使用DBCP或者c3p0这些数据库连接池类库. 在使用他们的时候, 我们只能控制池子的大小而不能控制哪个pstmt返回池中, 取出哪个pstmt].
2. 通过数字引用列
从ResultSet中获取相应的列有以下两种方式:
(1) id = rs.getLong(1);
(2) id = rs.getLong(“personID”);
实际上两种方式都不是最好的, 推荐的方式如下:
Static private final int PERSON_ID = 1;
…
id = rs.getLong(PERSON_ID);
3. 在Swing应用中对JDBC代码另外建立线程
[我对于这点没有太大的感受, 原来做的桌面程序都是在windows底下, 使用SWT来进行的. 在使用SWT进行开发的时候,如果需要弹出两个窗口, 就需要注意线程同步的问题了. 这个问题倒是不难解决.]
4. 只使用前向导航的ResultSet
[否则说明你的程序设计或者SQL代码有问题, JAVA不应该负责结果集的随意的移动.]
5. 使用wasNull()检查
If(rs.wasNull()) {
…//java中没有对应着null的关键字
}
6. 在进行其他优化之前先对SQL进行优化
7. 不要在数据库中保存二进制数据
理由:
这样一来,数据库就会变成一个搬运大块数据的中介
对于这些二进制数据的特殊处理就无法优化
解决方法:
将这些数据放到文件系统之中. 但是这样也带来危害, 及文件可能被删除了,但是数据库中还保存着文件的信息. 不过这种完整性问题并不严重.
8. 不要使用有实际含义的主键
比如email地址,SSN等.因为外部世界的变化可能会对系统造成很大的影响,而且自己还无法把握. 最好的实践就是, 用无意义的数字, 比如64位的字符串. 64bit能防止空间耗尽.
[这么说来, hibernate中的32位数字字串是最好的方式了?]
------------------------------------------[本章完]--------------------------------------------------
分享到:
相关推荐
819-4631 Sun Java Enterprise System 术语表 820-0103 适用于 UNIX 的 Sun Java Enterprise System 5 安装指南 820-0451 适用于 UNIX 的 Sun Java Enterprise System 5 发行说明 820-0589 适用于 UNIX 的 Sun ...
Paul J. Perrone 的Building Java Enterprise Systems with J2EE,中文版是J《2EE 构建企业系统 专家级解决方案》
Building Java Enterprise Applications vol 1 Architecture
Building Java Enterprise Systems with J2EEBuilding Java Enterprise Systems with J2EEBuilding Java Enterprise Systems with J2EE
Java Enterprise In A Nutshell
Enterprise Java Microservices is an example-rich tutorial that shows how to design and manage large-scale Java applications as a collection of microservices. Purchase of the print book includes a ...
好东西 大家分享,算是JAVA高阶了,我也是刚学,还能接受
Java Enterprise Best PracticesJava Enterprise Best Practices
Java EE 设计模式:Spring 企业级开发最佳实践 Java EE 设计模式是指在 Java 企业版(Java Enterprise Edition)中应用的设计模式,旨在提高软件系统的可维护性、可扩展性和可重用性。Spring 是当前最流行的 Java ...
Learn a use-case approach for developing Java enterprise applications in a continuously test-driven fashion. With this hands-on guide, authors and JBoss project leaders Andrew Lee Rubinger and Aslak ...
thinking in enterprise java
Java+Enterprise+Design+Patterns+-+Patterns+in+Java+Volume+3Java+Enterprise+Design+Patterns+-+Patterns+in+Java+Volume+3
thinking in Enterprise java en html
Thinking in Enterprise Java
Think In Enterprise Java v1.1
Java企业设计模式 源码 《Java 企业设计模式》(Java Enterprise Design Patterns) 随书源代码
Red Hat Enterprise Linux 7部署Oracle+12c+RAC+最佳实践
Effective Enterprise Java