`
maosheng
  • 浏览: 550248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java JDBC开发指导

 
阅读更多

01: Always get connection from Connection pool
Examples
import java.io.*;
public static void main(String[] arg)
{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/eBBS");
Connection con = ds.getConnection();
}
Rationale
Use Connection pool to get connection instead of DriverManager.getConeection .Since it is already having connections in pool, so it will take less time to get connection.


02: Always use Prepared statement instead of statement for executing Regular SQL queries (Not Dynamic Queries)
Examples
PreparedStatement st = con.prepareStatement(str_SQL);
Rationale
Prepared statements are precompiled statements and faster .It will create the execution package in DB level and reuse the same package when the same query executed multiple times.


03: Close All Connections, PreparedStatements, and Resultsets immediately once Execution /operations completes.
Examples
finally {
try {
if (resultset != null)
resultset.close();
if (preparestatement != null)
preparestatement.close();
if (connection != null)
connection.close();
} catch (SQLException e) {
throw new ApplicationException("SYS", "1000", e.getMessage()) }
Rationale
All Connections, Preparedstatements, Resultsets need to be close once the execution completes. Always Close Resultset first, then Prepared statements and Connections once the operation completes and also in Finally block at the end. This will avoid memory related issues and avoid Connection leakage related issues


04: Always specify a column list with in select/insert/Update/Delete SQL statements
Examples
String sqlQuery = "SELECT COUNTRYCODE, NAME, RISK FROM CNTRY "
Rationale
Always specify required column list with in select/insert/update/Delete statements (avoid "select *").

 

05:Use Isolation level appropriately
Examples
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED)
Rationale
Use the isolation level appropriately based on operations requirements. i.e. , if the Database connection requires operating only Selection operation then use Isolation level for only reading the values from DB which will output good performance.

 

06: Handle SQL related specific exceptions
Examples
catch (SQLException e) {
throw new ApplicationException("SYS", "1000", e.getMessage())
}
Rationale
Always handle the SQL related specific exceptions logic during performing Database operations like SQLException, BatchUpdateException.This will helpful to Debug for any exceptions by using Error messages and Reason codes.

 

07: Use Batch update / Batch insert instead of insert/update for multiple rows of data in same time
Examples
import java.io.*;
public static void main(String[] arg)
{
Connection conn = ds.getConnection();
Statement statement = conn.createStatement();
String insertQuery1 = "INSERT INTO ACCOUNT VALUES(01,XXX,'C')";
statement.addBatch(insertQuery1);
String insertQuery2 = "INSERT INTO ACCOUNT VALUES(01,YYY,'D')";
statement.addBatch(insertQuery2);
statement.executeBatch();
}
Rationale
Always use Batch Update /Insert instead of single update/insert for multiple rows of data hits in same table at same time (especially during batch operations for insert & update) , this will avoid the multiple database hits and provide Good response. Also handle Batch Exception handling to proper debugging.

 

08: Always Use Optimized query and minimize the size of Result set
Examples
import java.io.*;
public static void main(String[] arg)
{
pstmt = con.prepareStatement("SELECT id,name, age FROM CustInfo WHERE age > 10 ");
rs = pstmt.executeQuery();
}
Rationale
Always use optimized query before applying in program (Get suggestion from DataBase experts for new /Complex SQL queries) and make sure the result set will fetch only required data only.

09: Use appropriate data types instead of using ”string ” for all the data types.
Examples
import java.io.*;
public static void main(String[] arg)
{
rs.getDate(1);
rs.getBigDecimal(2);
rs.getInt(3)
}
Rationale
Please use appropriate data types instead using “string” for all the data types. If DB column is BigDecimal and if you are fetching this value use getBigDecimal to store the value. Also Use Date, Time, Timestamp objects as host Variables fields instead of Strings.

 

10: If Collection object using in program to store database values Nullify the object once the operation completes
Examples
HashMap hm = new HashMap();
pstmt = con.prepareStatement(SELECT_SQL);
rs = pstmt.executeQuery();
id= rs.getBigDecimal(1);
name= rs.getString(2);
hm.put(id,name);
hm.clear();
Rationale
If any collections object - Vector/Hashmap using to store Resultset values, please nullify that collection object once the operation is over. This will avoid the memory leakage issue

 

11: Avoid using Dynamic SQL Queries
Examples
String SELECT_SQL = “select systemdate from db2inst1.system ";
SELECT_SQL1 = SELECT_SQL + "where systemdate=?”
Rationale
Always avoid usage of Dynamic SQL Queries, Dynamic queries will form based on
concatenation “+” operation and which will cause performance issue.

 

12: Limit the usage of Platform specific features in SQL
Examples
String SELECT_SQL = “select systemdate from db2inst1.Account Fetch first 10 rows only";
Rationale
Always try to avoid usage of platform specific commands, it means the Query which we have written should be compatible to run at any database like DB2/ORACLE.

 

13: Always Use Column Number instead of Column Name for get Methods in Result sets.
Examples
String sqlQuery = "SELECT COUNTRYCODE, NAME, RISK FROM CNTRY ";
When fetching values from Resultset -rs use as below to get countrycode value.
rs.getString(1); instead of rs.getString(“COUNTRYCODE”);
Rationale
Use Column Number instead of Column name in result set get methods to get value of the SQL columns.

 

14: Avoid to use PreparedStatements inside loops
Examples
SQL1 = "SELECT COUNTRYCODE, NAME, RISK FROM CNTRY "
SQL2 = "SELECT EMPID,EMPNAME,DESG FROM EMP "
While(rs.next())
{
PreparedStatement emp_ps = con.prepareStatement(SQL2);
---
---
}
Rationale
Always avoid to write / execute PreparedStatements inside loops which will cause performance issues.

 

15: Limit the usage of Column functions (Aggregate/Sum/Count) in SQL
Examples
"SELECT SUM(AMOUNT) FROM SAL ";
"SELECT COUNT(NAME) FROM EMP ";
Rationale
Always try to restrict usage of Column functions (Aggregate/Sum/Count) in queries to avoid Performance/Portability issues

 

16: Use Stored Procedures using JDBC
Examples
CREATE PROCEDURE DB2INST1.MOVE_TO_HIST_RETTRN()
BEGIN
DECLARE r_stmt VARCHAR(1500);
DECLARE h_stmt VARCHAR(2500);
SET r_stmt = 'insert INTO db2inst1.RETTRNHIST (BATCHNO,BATCHENTRYDATE,SEQNO,CURRENCYCODE,ACCOUNTNO)select BATCHNO,
BATCHENTRYDATE,SEQNO,CURRENCYCODE,ACCOUNTNO from db2inst1.RETTRN where batchentrydate < (SELECT PREVWORKINGDATE FROM DB2INST1.SYSTEM)';
PREPARE Q1 FROM r_stmt;
EXECUTE Q1;
SET h_stmt = 'DELETE FROM DB2INST1.RETTRN WHERE BATCHENTRYDATE <
(SELECT PREVWORKINGDATE FROM DB2INST1.SYSTEM)';
PREPARE Q2 FROM h_stmt;
EXECUTE Q2;
END
Rationale
Stored procedures are ideal when there is a complex piece of business logic that needs to be performed involving a lot of database access.

 

事务的隔离级别(5个):

ISOLATION_DEFAULT

ISOLATION_READ_UNCOMMITTED:会产生脏读,不可重复读和幻像读

ISOLATION_READ_COMMITTED:可以避免脏读出现,但是可能会出现不可重复读和幻像读

ISOLATION_REPEATABLE_READ:可以防止脏读,不可重复读。但是可能出现幻像读

ISOLATION_SERIALIZABLE:可以防止脏读,不可重复读外,还避免了幻像读

 

事务传播行为(7个): 

PROPAGATION_REQUIRED :如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务;PROPAGATION_REQUIRED:应该是我们首先的事务传播行为。它能够满足我们大多数的事务需求。

PROPAGATION_SUPPORTS :如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

PROPAGATION_MANDATORY :如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

PROPAGATION_REQUIRES_NEW :总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

PROPAGATION_NOT_SUPPORTED :总是非事务地执行,并挂起任何存在的事务。

PROPAGATION_NEVER :总是非事务地执行,如果存在一个活动事务,则抛出异常

PROPAGATION_NESTED :如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java jdbc编程技术

    一本很实用的java 数据库开发入门级开发指南,实例精彩,很有指导意义。

    java Swing mysql实现简单的购物系统【源码+数据库+运行指导视频】

    包含:项目源码、数据库脚本、运行指导视频。 项目都经过严格调试,确保可以运行! 二、技术实现 后端:java swing,面向对象 开发工具:eclipse、Navicat 三、系统划分与功能 管理员登录 商品种类管理:商品类别...

    《JDBC API数据库编程实材作教材》[PDF]

    通过学习《JDBC API数据库编程实作教程》,读者可以熟练掌握JDBC API,并学会如何开发功能强大的Java数据库应用程序。 《JDBC API数据库编程实作教程》循序渐进、详细地介绍JDBC API,同时以实例方式深入讲解JDBC ...

    软件开发JAVA实验指导书

    实验一 Java编程环境下载、安装、配置与运行 实验二 Java基本语法练习 实验三 面向对象编程练习 实验四 包、异常处理 实验五 常用系统类 实验六 JDBC数据库编程 实验七 图形用户界面

    Java程序设计与项目实战全程实录光盘

    由浅入深、循序渐进地向读者讲述了Java开发环境的搭建、Java基础语法知识、Java算法流程、面向对象高级特性、Java的输入/输出、多线程机制、Swing界面编程、Applet的基本知识、Java 2D/3D、Java流媒体、JDBC 编程...

    数据库实验JDBC连接数据库.docx

    选课序号:36 选课序号:36 大连海事大学 数据库原理课程实验报告 (2010-2011学年第二学期) 实验八 JDBC连接数据库 班 级: 智能一班 学 号: ********** 姓 名: 徐维坚 指导教师: *** 成 绩: 2012年 6月 13日 ...

    JAVA程序开发大全---上半部分

    本书内容主要来自作者多年的软件开发和教学、培训经验,通过实例由浅入深地介绍MyEclipse的基本应用,是一本强调实践技能的实用性指导图书。 本书内容丰富、技术全面、案例实用,而且所有的实例都以MyEclipse工程的...

    初级,中级,高级的程序员java简历

    熟练掌握Java EE开发技术,包括Servlet、JSP、JDBC等 熟悉常用的数据库操作和SQL语言,如MySQL、Oracle等 具备较强的问题解决能力和代码调试能力 有良好的编程规范和代码质量意识 高级程序员Java简历资源描述: 在...

    Java完全自学手册4王灏,马军

    全书示向对象高级属性、多线程机制、图形编辑、Java的输入/输出、Applet的基本知识、数据库的安装和使用、Java的连接数据库的JDBC方法、JSP基础知识,以及JSP进阶开发等,同时也提供了学生管理系统和家庭理财管理...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    完全自学手册java 王灏,马军 等编著

    全书示向对象高级属性、多线程机制、图形编辑、Java的输入/输出、Applet的基本知识、数据库的安装和使用、Java的连接数据库的JDBC方法、JSP基础知识,以及JSP进阶开发等,同时也提供了学生管理系统和家庭理财管理...

    jsp开发必备api手册

     《The J2EETM Tutorial 中文版》的作者是Sun Microsystem公司Java开发小组资深的开发人员,与另一部取得空前成功的《The JavaTM Tutorial》一样,建立了与读者之间最为有效的交互途径。同时,在本书的编写过程中,...

    基于Java C/S模式的简单学生管理系统

    一个用java编写的c/s模式的学生管理系统,不过没有加入管理员功能。只能算是一个大概的演示版。供学习之用。望高手指导

    Web应用程序开发实验指导书

    信 息 学 院2008-1目 录实 验 说 明 1实验 1 JSP运行环境设置 2实验 2 JSP基本语法练习 5实验 3 Java Bean的应用 8实验 4 Servlet设计与配置 12实验 5 JDBC的使用 15实验 6 Tag设计与使用 23实验 7 基于JSTL...

    java基于jsp+servlet+mysql开发实现的学生选课管理系统源码可以多角色登录代码绝对可以正常运行亲测可用

    主要框架技术:jsp+servlet+js+jdbc+mysql 数据库:mysql5.5或5.6或5.7 开发工具:Myeclipse或Eclipse、jdk1.8、tomcat8。 注:带论文 1、有运行导入指导文档教程(包括数据库导入,源码导入eclipse运行) 2、有运行...

    kafka-connect-jdbc:Kafka Connect连接器,用于兼容JDBC的数据库

    发展要构建开发版本,您需要Kafka的最新版本以及一系列上游Confluent项目,您必须从其相应的快照分支中进行构建。 有关此过程的指导,请参见。 您可以使用标准生命周期阶段在Maven中构建kafka-connect-jdbc。常问...

    基于java web晚上书城系统的设计与实现

    开发语言:Java语言 主要技术:mvc、jdbc、jsp、bootstrap、html5、css、js、jquery等技术 运行环境:win7/win10/jdk1.8 开发工具:Eclipse 运行工具:Eclipse/MyEclipse,eclipse最兼容 数 据 库:Mysql5.5/5.7/8.0...

Global site tag (gtag.js) - Google Analytics