`
yaodaqing
  • 浏览: 349353 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

jdbc连接数据库单例延迟加载

    博客分类:
  • JDBC
阅读更多
package com.daqing.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 单例模式会有一个实例;会new一次
 * 单例模式不使用静态的
 * A0102JdbcUtilsSingletonRetard
 * 		意思:jdbc工具类,单例,延迟加载就是用到的时候再new
 * @author Administrator
 *
 */
public final class A0103JdbcUtilsSingletonRetard {

	private String url = "jdbc:mysql://127.0.0.1:3306/jdbc";
	private String user = "root";
	private String password = "root";
	
	/**
	 * 预初始化
	 */
	private static A0103JdbcUtilsSingletonRetard instance = null;
	
	private A0103JdbcUtilsSingletonRetard(){
	}
	
	/**
	 * 加锁模式,双重检查,防止重复的new
	 * @return
	 */
	public static A0103JdbcUtilsSingletonRetard getInstacce(){
		if(instance==null){
			synchronized (A0103JdbcUtilsSingletonRetard.class) {
				if(instance==null){
					instance = new A0103JdbcUtilsSingletonRetard();
				}
			}
		}
		return instance;
	}
	
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public Connection getConnection() throws SQLException{
		return DriverManager.getConnection(url, user, password);
	}
	
	public void free(ResultSet rs, PreparedStatement ps, Connection conn){
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			System.out.println("ResultSet关闭发生异常...");
		} finally {
			if(ps!=null){
				try {
					ps.close();
				} catch (SQLException e) {
					System.out.println("PreparedStatement关闭发生异常...");
				} finally {
					if(conn!=null){
						try {
							conn.close();
						} catch (SQLException e) {
							System.out.println("Connection关闭发生异常...");
						}
					}
				}
			}
		}
	}
}
分享到:
评论
2 楼 hmxingkong 2012-05-29  
A0103JdbcUtilsSingletonRetard()实例的延迟加载是实现了,但我想问如何使执行sql之后的结果集即RresultSet实现延迟加载呢?目前面临着2200w的数据量,而这只是小小的一部分数据(数据仓库中的),设置JVM内存不可行,另外一种是以Stream的方式查询,但这个不符合这边的应用,所以想以JDBC实现像Hibernate的延迟加载方式,但一直找不到相关资料,请教博主了^_ ^
1 楼 superclay 2011-04-13  
好!!!!!!!!!!

相关推荐

    Oracle jdbc 单例 工具类

    综上所述,"Oracle jdbc 单例 工具类"主要涉及Oracle数据库的JDBC连接管理,通过单例模式实现连接的高效复用,以及在Java环境中与Oracle数据库交互的基础知识。理解这些概念对于任何使用Java进行数据库开发的程序员...

    jdbc连接工具类 单例连接模式,进度1

    在本项目中,“jdbc连接工具类 单例连接模式,进度1”指的是创建了一个使用单例设计模式的JDBC连接工具类,以优化数据库连接的管理和复用,提高程序性能。下面我们将深入探讨这两个关键概念。 首先,让我们了解一下...

    java单例模式连接数据库源码

    其中,DCL和静态内部类是最推荐的,因为它们既实现了线程安全,又保证了单例的唯一性,并且延迟加载。 1. **懒汉式**:在类的内部创建一个实例,但在获取实例时才进行初始化。这种实现方式在多线程环境下不安全,...

    单例模式----数据库连接池管理类的应用

    还有一种双重检查锁定(DCL)的实现方式,既保证了线程安全,又实现了延迟加载,是较为理想的单例模式实现。 以HikariCP为例,它被誉为“最快的JDBC连接池”。HikariCP使用了单例模式,提供了线程安全的初始化和...

    数据库连接池技术

    在使用JDBC访问数据库时,首先需要创建数据库连接,这一过程可以通过连接池来优化。连接池技术的核心在于DBConnectionManager和DBConnectionPool两个类。DBConnectionManager负责管理多个连接池对象,装载和注册JDBC...

    JAVA数据库工具类

    在这个特定的场景中,我们关注的是一个基于DBCP(Database Connection Pool)的数据库工具类,它利用了Google工程师Bob Lee提出的懒汉单例模式来构建连接工厂,并将数据库连接与当前线程绑定,以优化资源管理和防止...

    java 单例模式(饿汉模式与懒汉模式).docx

    这种模式在资源管理、缓存、日志记录等场景中广泛应用,例如在 JDBC 连接数据库时,通常会采用单例模式来管理数据库连接。 单例模式有两种常见的实现方式:饿汉模式和懒汉模式。 1. **饿汉模式**: - 饿汉模式的...

    JDBC学习笔记

    3. **延迟加载**: - 在需要使用工具类的功能时才创建其实例。 - 使用同步代码块解决多线程下的实例化问题。 #### 五、JDBC增删改查操作 - **增(Insert)**:使用`PreparedStatement`执行插入操作。 - **删...

    自己动手模仿Hibernate写数据库框架

    2. **设计模式**:模仿Hibernate,我们需要理解其背后的设计模式,如工厂模式(用于创建数据库连接)、单例模式(控制数据库连接的数量)、代理模式(处理延迟加载)等。 3. **JDBC基础**:尽管我们要模仿Hibernate...

    设计模式之单例模式

    3. **双重检查锁定**:结合了懒汉式的延迟加载和同步机制,只在必要的时候初始化实例,并且只对必要的检查进行同步,提高了效率和线程安全性。 4. **静态内部类**:利用Java的类加载机制来保证初始化实例时只有一个...

    文思创新面试的一些程序文件.doc

    总结:这个文档主要涵盖了Java Web开发中的关键知识点,包括JSP的内置对象、单例模式的实现以及使用JDBC操作Oracle数据库的基本步骤。这些知识点在进行Web应用开发和数据库交互时至关重要,理解它们对于编写高效的...

    java模式之单例模式.doc

    在Java中,如果需要管理与MySQL数据库的连接,可以使用单例模式来创建一个`DBManager`类,该类负责初始化和管理数据库连接。以下是一个简单的示例: ```java public class DBManager { private String user; ...

    【ASP.NET编程知识】java 单例模式(饿汉模式与懒汉模式).docx

    这种模式在 ASP.NET 编程中同样适用,尤其是在需要频繁创建和销毁对象时,如与数据库交互的 JDBC 连接管理。 单例模式分为两种主要实现方式:饿汉模式和懒汉模式。 1. **饿汉模式**: 饿汉模式在类加载时就完成了...

    hibernate开放源代码的对象关系映射框架详解

    - **Web层的延迟加载**:在Web应用中,只有当真正需要数据时,Hibernate才会执行数据库查询,提高性能。例如,只加载实体的一部分属性,其他属性在需要时再加载。 总结来说,Hibernate通过提供这些接口和机制,极大...

    hibernate面试题总结

    - `load`方法是基于对象标识符(OID)来获取对象,它返回的是一个代理对象,实际的对象数据会在第一次访问属性时从数据库加载,实现了延迟加载。如果对象不存在,会抛出`EntityNotFoundException`。 - `get`方法...

    Hibernate3.3jar包

    7. **懒加载(Lazy Loading)**: Hibernate提供了一种优化策略,即延迟加载,只有在真正需要时才加载关联的对象,减少内存消耗。 8. **级联操作(Cascading)**: 可以配置实体间的级联关系,如`@OneToMany` 和 `@...

    BeginningHibernate_英文版

    延迟加载(Lazy Loading)是Hibernate的重要特性,允许在真正需要数据时才加载关联对象,避免了“懒汉式”加载带来的性能开销。而立即加载(Eager Loading)则是在查询时就加载所有关联对象,适用于关联数据经常一起...

    java在控制台下做的三层结构

    在控制台应用中,这通常通过JDBC(Java Database Connectivity)实现,包括加载驱动、建立连接、执行SQL语句以及处理结果集等步骤。需要注意的是,为了遵循分层架构的原则,数据访问层应尽量不包含任何业务逻辑,仅...

    SSH面试题详细总结.pdf

    - 性能高效,因为它是轻量级框架,提供了延迟加载等优化策略。 5. Hibernate中类间关系的实现: Hibernate通过配置文件中的映射注解(如@ManyToOne、@OneToMany、@ManyToMany等)来定义类与类之间的关系,对应于...

    java必备知识点大全.pdf

    Hibernate中get和load的区别:get是立即加载,load是延迟加载。 Hibernate、Ibatis、Jdbc三者的区别:Hibernate和Ibatis都是JDBC的封装框架,但Hibernate是全自动的ORM映射,而Ibatis是半自动的。 Hibernate的运行...

Global site tag (gtag.js) - Google Analytics