`
luoyu-ds
  • 浏览: 137410 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

一个关于数据库实现类初使化的解决办法

阅读更多

前几天写了个数据库链接池类,但有个问题使终解决得不太满意,所以贴出来让大家帮我想想办法啦.....
首先写了个ConnectionFactory接口类,代码如下:

package com.luoyu.persistence;

public interface ConnectionFactory {
public static final String CONNECTION_USERNAME = "connection.username";

public static final String CONNECTION_PASSWORD = "connection.password";

public static final String CONNECTION_URL = "connection.url";

public static final String DRIVER_CLASS = "driver.class";


}
 
然后是DataSourceConnectionFactory实现类:
package com.luoyu.persistence;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import oracle.jdbc.pool.OracleDataSource;

public class DataSourceConnectionFactory implements ConnectionFactory {
private static DataSourceConnectionFactory instance;
private static Properties config;
@SuppressWarnings( { "unchecked", "unused" })
private static Class driver;
private static OracleServerDataSource Orads;
private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();
static{
init();
}
public static void init(){
try {
config = new Properties();
config.load(ConnectionFactory.class
.getResourceAsStream("/config.properties"));
Orads= new OracleDataSource();
driver = Class.forName(config.getProperty(DRIVER_CLASS));
Orads.setUser(config.getProperty(CONNECTION_USERNAME));
SQLds.setPassword(config.getProperty(CONNECTION_PASSWORD));
Orads.setURL(config.getProperty(CONNECTION_URL));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static DataSourceConnectionFactory getInstance() {
if (instance == null) {
instance = new DataSourceConnectionFactory();
}
return instance;
}

public static void closeConnect() throws SQLException {
if (!threadLocal.get().isClosed() && threadLocal.get() != null) {
threadLocal.get().close();
}
threadLocal.set(null);
}

public static void destory() {
instance = null;
config = null;
driver = null;
Orads= null;
}
private Connection getConnect() throws SQLException {
if (threadLocal.get() == null || threadLocal.get().isClosed()) {
threadLocal.set(Orads.getConnection());
}
return threadLocal.get();
}
public static Connection getConnection()throws SQLException{
Connection connection = getInstance().getConnect();
return connection;
}
}
 
config.properties配置文件:

connection.username=system
connection.password=admin
connectino.url=jdbc:oracle:thin://localhost:1521:orcl
driver.class=oracle.jdbc.driver.OracleDriver
 

好了,问题来了,在实现类里,那个静态块显得有点多余,但我去掉后,老是报threadLocal.set(Orads.getConnection());的空指针异常,很显然数据源Orads没有初使化成功,如果把public static void init()方法改为静态块就行,但这样我在前台没法写监听器了,因为没有init()方法给我调用。。。整个采用单例设计模式,对外隐藏了getInstance()方法,只提供destory(),init().和getConnection(),所以这个问题我没法解决了....

 

分享到:
评论

相关推荐

    C#数据库操作类

    完美支持mysql,sqlserver,access,Oracle,sqlite,初始化之后,可实现一句话执行sql语句、存储过程等,并且可将数据库中的列名反射到类的属性中。

    大觅网-数据库初始化脚本.rar

    大觅网-数据库初始化脚本 本资源为《基于Spring Cloud的分布式微服务电商项目大觅网实战》的数据库初始化脚本。 基于Spring Cloud的分布式微服务电商项目大觅网实战课程视频课程,电商类大觅网以Spring Boot为...

    Android SqliteOpenHelper数据库的基本使用

    数据库的使用,包含增删改查,是使用android 内置的数据库助手类实现的

    大觅网-数据库初始化脚本.zip

    本资源为《基于Spring Cloud的分布式微服务电商项目大觅网实战》的数据库初始化脚本。 基于Spring Cloud的分布式微服务电商项目大觅网实战课程视频课程,电商类大觅网以Spring Boot为项目基础骨架,本课程基于该...

    一个好用的数据库类

    欢迎一起探讨,OCI的功能很强大,支持动态绑定,支持pl/sql,它的类的封装和CMYODBC很相似,用它来代替ODBC编程,可以解决ODBC的效率问题)其过程都很相似,一般分为以下几个过程: 1 初始化工作环境 2 连接...

    解析Java类和对象的初始化过程

    通过一个实际问题引入,将源代码转换成JVM字节码后,对JVM执行过程的关键点进行全面解析,并在文中穿插入了相关JVM规范和JVM的部分内部理论知识,以理论与实际结合的方式介绍对象初始化和类初始化之间的协作以及可能...

    实现简单的购物车义商品类Goods,其属性有商品编码,商品名称,种类,单价。其方法有初始化商品所有属性的构造函

    其方法有初始化商品所有属性的构造函 数,能够显示商品全部属性的 方法Show(),能够单独设置单个属性的方法,能够单独获取单个属性值的方法。 定义购物项类Item,其属性有商品和商品数量。 定义购物车类Cart,其...

    基于JavaBean技术的数据库访问及应用

    行初始化,根据连接不同的数据库,可分别对构造方 重载,如用JDBC-ODBC桥接数据库可用带数据源 构造方法创建对象,若通过连接池构造,可编写构造 类的其它方法可分别实现对数据表的增、删、改、查的 关闭连接对象、...

    学生信息管理系统(实现增删改查操作)Java+Servlet+HTML+CSS+数据库

    Java+Servlet+HTML+CSS+数据库,实现的学生信息管理系统,实现了 新增和查询功能。 覆盖知识 ...三层架构的搭建(dao层接口和实现类的编写、service层接口和实现类的编写、view层的Servlet类的编写)

    学生信息管理系统(仅实现新增和查询)Java+Servlet+HTML+CSS+数据库

    Java+Servlet+HTML+CSS+数据库,实现的学生信息管理系统,实现了 新增和查询功能。 覆盖知识 ...三层架构的搭建(dao层接口和实现类的编写、service层接口和实现类的编写、view层的Servlet类的编写)

    Java EE数据初始化应用中的设计模式解决方案

    该方法首先将要初始化的数据看做一个复杂对象,通过建造者模式的产品角色来表示.利用抽象建造者角色定义数据初始化的先后顺序,使用Hibernate框架将各部分数据保存到数据库中;然后通过策略模式定义应用开发阶段和...

    Android SQLite 数据库详细介绍

    ndroid SQLite 数据库详细...因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版本进行管理来实现前面提出的需求。

    2022年数据库应用综合实验:图书管理系统【全部代码+完整实验报告】

    (3)数据初始化 (4)视图创建 (5)索引创建 (6)存储过程创建 (7)触发器创建 (8)安全方案设计及实现脚本 (9)业务查询及查询脚本 (10)数据更新及脚本 (11)数据库对称加密、证书加密

    Java数据库查询结果的输出

    //初始化向量对象  tm.fireTableStructureChanged();//更新表格内容  while(rs.next()){  Vector rec_vector=new Vector();  //从结果集中取数据放入向量rec_vector中  rec_vector.addElement(rs....

    Java+Servlet+HTML+CSS+数据库,实现的图书管理系统,完整的实现了增删改查的操作及页面之间跳转

    覆盖知识 java部分:程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、实用类...三层架构的搭建(dao层接口和实现类的编写、service层接口和实现类的编写、view层的Servlet类的编写)

    动态可扩展的数据库设计.docx

    因为业务在 发展,或者需求就有可能需要一个完全动态的可扩展的数据库设计 方案,但是以目前的关系数据库实现这种动态扩展的特性,在系统 一定规模之后所付出的代价是昂贵的,也是不安全的。为了这种动 态扩展性,有...

    Oracle数据库管理员技术指南

    1.7.11 怎样列出和描述初始化参数 1.7.12 怎样列出无记载参数 1.8 回顾 第2章 管理数据存储、对象和容量 2.1 配置数据存储 2.1.1 管理可用空间碎片 2.1.2 聚集可用空间的技术 2.1.3 管理区的碎片 2.1.4 查找...

    数据库设计范式.doc

    范 化是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工 作之后的一个细化的过程。 下面是范化的一个例子 Customer Item purchased Purchase price Thomas Shirt $40 Maria Tennis shoes...

    Android 数据库增删改查项目.rar

    我们在编写数据库应用软件时...因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版本进行管理来实现前面提出的需求

    SQL Server数据库企业应用系统开发

    4 本章小结 第5章 初始化电子商城数据库 5. 1 初始化基层数据表 5. 1. 1 初始化统计类型表 5. 1. 2 初始化信誉等级表 5. 1. 3 初始化商品类型表 5. 1. 4 初始化付款方式表 5. 1. 5 ...

Global site tag (gtag.js) - Google Analytics