JDBC(数据库的使用优化)

一、业务代码的优化:(使用创建数据库连接工具类)

  1. 将获取Connection的代码抽取
    a.先抽取驱动,把驱动写在静态代码块中,提升运行效率,不用每次都加载驱动
    b.在抽取getConnection的方法。放回Connection(获得的连接对象)
  2. 将驱动等配置提取成配置文件
    a.由于数据库的连接信息都是相同的,所有把数据库连接的参数信息抽取成配置文件,方便作为参数读取使用。(比如连接路径,数据库密码等)
    b.读取配置文件有很多方法(主要知道的四种)
    1. //传统的读取方式,使用Properties对象的load方法读取
    2. public void test1() throws Exception{
    3. InputStream in = new FileInputStream("F:\\workspace\\android_web05\\src\\jdbc.properties");
    4. Properties p = new Properties();
    5. p.load(in);
    6. System.out.println(p.get("driver"));
    7. System.out.println(p.get("url"));
    8. System.out.println(p.get("username"));
    9. System.out.println(p.get("password"));
    10. }
    11. //由于路径在服务器端会时时变化,所以使用类的加载器动态获取路径
    12. public void test2() throws Exception{
    13. //类加载器:加载的是类路径的代码(.class字节码文件所在的目录)
    14. String path = ReadFileDemo.class.getClassLoader().getResource("jdbc.properties").getPath();
    15. System.out.println(path);
    16. InputStream in = new FileInputStream(path);
    17. Properties p = new Properties();
    18. p.load(in);
    19. System.out.println(p.get("driver"));
    20. System.out.println(p.get("url"));
    21. System.out.println(p.get("username"));
    22. System.out.println(p.get("password"));
    23. }
    24. //这种方式和第2中方式相似,不过是直接通过类的加载器获得文件的输入流。
    25. public void test3() throws Exception{
    26. //类加载器:加载的是类路径的代码(.class字节码文件所在的目录)
    27. InputStream in = ReadFileDemo.class.getClassLoader().getResourceAsStream("jdbc.properties");
    28. Properties p = new Properties();
    29. p.load(in);
    30. System.out.println(p.get("driver"));
    31. System.out.println(p.get("url"));
    32. System.out.println(p.get("username"));
    33. System.out.println(p.get("password"));
    34. }
    35. //通过创建ResourceBundle对象来读取配置文件,ResourceBundle底层也是封装了类的加载器专门读取配置文件使用,开发者一般使用这种方法,最为简单。
    36. public void test4() throws Exception{
    37. ResourceBundle rb = ResourceBundle.getBundle("jdbc");//这里直接写文件名,不用加扩展名
    38. System.out.println(rb.getString("driver"));
    39. System.out.println(rb.getString("username"));
    40. System.out.println(rb.getString("password"));
    41. System.out.println(rb.getString("url"));
    42. }
  3. 关闭资源进行方法抽取
    1. public static void close(Connection conn,Statement stmt,ResultSet rs){
    2. try {
    3. if(rs!=null){
    4. rs.close();
    5. }
    6. } catch (SQLException e) {
    7. e.printStackTrace();
    8. } finally{
    9. rs = null;
    10. try {
    11. if(stmt!=null){
    12. stmt.close();
    13. }
    14. } catch (SQLException e) {
    15. e.printStackTrace();
    16. } finally{
    17. stmt = null;
    18. try {
    19. if(conn!=null){
    20. conn.close();
    21. }
    22. } catch (SQLException e) {
    23. e.printStackTrace();
    24. } finally{
    25. conn = null;
    26. }
    27. }
    28. }
    29. }

    注意:需要判断连接是否为空,同时在finally里,把上一个try块中的对象置为空(null),已经本次try块中的对象关闭。

  4. 完整优化代码
    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6. import java.util.ResourceBundle;
    7. public class JDBCUtils {
    8. private static String driver = null;
    9. private static String url = null;
    10. private static String username = null;
    11. private static String password = null;
    12. static{
    13. ResourceBundle rb = ResourceBundle.getBundle("jdbc");
    14. driver = rb.getString("driver");
    15. url = rb.getString("url");
    16. username = rb.getString("username");
    17. password = rb.getString("password");
    18. }
    19. static{
    20. try {
    21. Class.forName(driver);
    22. } catch (ClassNotFoundException e) {
    23. e.printStackTrace();
    24. }
    25. }
    26. public static Connection getConnection() throws Exception{
    27. Connection conn = DriverManager.getConnection(url, username, password);
    28. return conn;
    29. }
    30. public static void close(Connection conn,Statement stmt,ResultSet rs){
    31. try {
    32. if(rs!=null){
    33. rs.close();
    34. }
    35. } catch (SQLException e) {
    36. e.printStackTrace();
    37. } finally{
    38. rs = null;
    39. try {
    40. if(stmt!=null){
    41. stmt.close();
    42. }
    43. } catch (SQLException e) {
    44. e.printStackTrace();
    45. } finally{
    46. stmt = null;
    47. try {
    48. if(conn!=null){
    49. conn.close();
    50. }
    51. } catch (SQLException e) {
    52. e.printStackTrace();
    53. } finally{
    54. conn = null;
    55. }
    56. }
    57. }
    58. }
    59. }

来自为知笔记(Wiz)

时间: 2024-10-15 13:23:00

JDBC(数据库的使用优化)的相关文章

数据库访问性能优化

特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于KV数据库或内存数据库或者是基于SSD技术的数据库: 3.  本文未深入数据库优化中最核心的执行计划分析技术. 读者对像: 开发人员:如果你是做数据库开发,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化. 架构师:如果你已经是数据库应用的架构师,那本文的

数据库访问性能优化 Oracle

特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于KV数据库或内存数据库或者是基于SSD技术的数据库: 3.  本文未深入数据库优化中最核心的执行计划分析技术. 读者对像: 开发人员:如果你是做数据库开发,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化. 架构师:如果你已经是数据库应用的架构师,那本文的

[转]面向程序员的数据库访问性能优化法则

原文地址:http://blog.csdn.net/yzsind/article/details/6059209 特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于KV数据库或内存数据库或者是基于SSD技术的数据库: 3.  本文未深入数据库优化中最核心的执行计划分析技术. 读者对像: 开发人员:如果你是做数据库开发,那

【转载】HBase 数据库检索性能优化策略

转自:http://www.ibm.com/developerworks/cn/java/j-lo-HBase/index.html 高性能 HBase 数据库 本文首先介绍了 HBase 数据库基本原理及专用术语,然后介绍了 HBase 数据库发布的操作 API 及部分示例,重点介绍了 Scan 方法的操作方式,接着介绍了检索 HBase 数据库时的优化方案,最后通过一个示例总结了实际项目中遇到的检索速度慢的解决方案. HBase 数据表介绍 HBase 数据库是一个基于分布式的.面向列的.主

jdbc 链接池的优化

package cn.itcast.jdbc.datasourse; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.LinkedList; public class MyDataSourse {    private static String url = "jdbc:mysql://localhost:3306/test"; 

Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则

特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于KV数据库或内存数据库或者是基于SSD技术的数据库: 3.  本文未深入数据库优化中最核心的执行计划分析技术. 读者对像: 开发人员:如果你是做数据库开发,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化. 架构师:如果你已经是数据库应用的架构师,那本文的

面向程序员的数据库访问性能优化法则

此文于2010-12-08被推荐到CSDN首页 如何被推荐? 面向程序员的数据库访问性能优化法则 特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于KV数据库或内存数据库或者是基于SSD技术的数据库: 3.  本文未深入数据库优化中最核心的执行计划分析技术. 读者对像: 开发人员:如果你是做数据库开发,那本文的内容非常适

采用DTO和DAO对JDBC程序进行进一步优化

采用DTO和DAO对JDBC程序进行进一步优化 DTO:数据传输对象,主要用于远程调用等需要远程调用对象的地方DAO:数据访问对象,主要实现封装数据库的访问,通过它可以把数据库中的表转换成DTO类 引入DTO其实就是新建实体类. 那么DAO呢,就是封装访问数据的方法,比如对某一个表插入,更新,删除等方法可以放进对应的dao中 代码如下: 这是访问User表所使用方法的接口,里面放的是访问过程中会使用到时方法 public interface UserDao { public void save(

对.net orm工具Dapper在多数据库方面的优化

Dapper是近2年异军突起的新ORM工具,它有ado.net般的高性能又有反射映射实体的灵活性,非常适合喜欢原生sql的程序员使用,而且它源码很小,十分轻便.我写本博客的目的不是为了介绍Dapper,而是要将我使用Dapper迁移数据库过程中遇到的bug和一些优化介绍给大家,Dapper在多数据库支持上有些问题,我做了以下5个方面的优化. 一:Dapper核心库存在一个重要的bug是各数据库默认返回类型不同造成的,像count,sum等一些函数在不同的数据库返回类型不同.比如 select c

java JDBC 数据库链接

1.准备环境搭建: myeclipse,sql2005,jdbc. 2.都下载完之后开始进行安装 ,前两个是属于数据库软件,正常安装即可(注意数据库登陆不要使用windows验证) <1> 将JDBC解压缩到任意位置,比如解压到C盘program files下面,并在安装目录里找到sqljdbc.jar文件,得到其路径开始配置环境变量 在环境变量classpath 后面追加 C:\Program Files\Microsoft SQL Server2005 JDBC Driver\sqljdb