前几天写了个数据库链接池类,但有个问题使终解决得不太满意,所以贴出来让大家帮我想想办法啦.....
首先写了个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#进行面向对象编程时。数据库初始化主要涉及设置数据库连接、创建数据库结构(如表、索引、视图等)、填充初始数据以及配置数据库权限等步骤。在C#中,...
首先,新建一个SQL数据库通常涉及到以下步骤: 1. **选择数据库管理系统**:SQL数据库有许多不同的实现,如MySQL、PostgreSQL、SQL Server、Oracle等。你需要根据项目需求和资源选择合适的DBMS。 2. **安装和配置*...
- 测试类:用于验证数据库创建和初始化功能是否正常。 在实际开发中,我们还需要考虑事务管理、异常处理、性能优化等方面的问题。例如,如果多个操作需要一起成功或一起失败,应将它们包装在一个事务中。此外,为了...
在IT行业中,数据库链接信息的初始化是任何应用与数据库交互的基础步骤。这涉及到配置应用程序以正确连接到数据库服务器,获取并管理数据。本主题将详细探讨如何使用`common-configuration`、`slf4j`和`logback`组件...
压缩包中的"InitData"可能是用于初始化数据库的数据脚本或者是一个程序,用于在连接建立后执行特定的数据库初始化操作,如填充测试数据、创建表结构等。 总的来说,通过VC++和ADO,你可以轻松地在Oracle数据库上...
创建一个名为`Test`的Java类,将用于测试数据库连接的代码复制到文件中。这个类通常会调用`DBUtil.getConnection()`方法,尝试建立并验证数据库连接。 8. **运行测试**: 运行`Test`类,检查是否能成功连接到...
描述中提到的“初始化之后,可实现一句话执行sql语句、存储过程”意味着这个类可能有一个简洁的API,允许开发者只需一行代码就能执行SQL命令或调用存储过程。例如,可能有一个`ExecuteSql`方法用于执行简单的INSERT...
《Android数据库初始化技术研究》这篇文献深入探讨了在Android应用开发中如何有效地进行数据库初始化,主要涉及了Android的分层架构、数据持久化方法以及针对SQLite数据库的不同初始化方案,并进行了性能对比和分析...
ClassLoader是一个抽象类,它是Java中的一个关键组件,实现了JVM规范定义的加载类的功能。类加载过程通常分为三个阶段:加载、验证、准备。加载阶段,ClassLoader根据类名找到对应的.class文件,并将其转换为内存中...
8. **最佳实践**:一个好的数据库连接类应该遵循最佳实践,例如,使用预编译的语句,避免长时间保持数据库连接开放,以及在完成操作后及时关闭连接。 9. **性能优化**:类可能包括了连接池的概念,通过复用已存在的...
4. ini.php:可能包含了配置信息,如数据库连接参数,错误日志路径等,用于初始化数据库操作类。 5. index.php:通常是项目的入口文件,可能会实例化数据库操作类并调用其方法来处理用户请求。 6. phpAdmin:这...
大觅网-数据库初始化脚本 本资源为《基于Spring Cloud的分布式微服务电商项目大觅网实战》的数据库初始化脚本。 基于Spring Cloud的分布式微服务电商项目大觅网实战课程视频课程,电商类大觅网以Spring Boot为...
在`CSqlite3.h`中,通常会定义一个名为`CSqlite3`的类,其中包含初始化、关闭数据库、执行SQL语句等方法。单例模式的实现通常包括一个私有的静态成员变量来保存类的唯一实例,以及一个公共的静态成员函数(如`...
该类提供了构造函数初始化连接字符串、插入数据、查询数据等方法,方便开发者快速实现数据库操作。 知识点一:C# SQL 连接字符串 在C#中,连接SQL数据库需要使用连接字符串,该字符串由服务器地址、用户名、密码、...
3. **实现连接池管理**:创建一个`ConnectionPool`类,包含初始化连接池的方法(根据配置创建初始连接),以及获取和归还连接的方法。这里需要实现线程安全的连接分配和回收逻辑。 4. **异常处理**:在获取和释放...
在这个特定的场景中,我们关注的是一个基于DBCP(Database Connection Pool)的数据库工具类,它利用了Google工程师Bob Lee提出的懒汉单例模式来构建连接工厂,并将数据库连接与当前线程绑定,以优化资源管理和防止...
数据库连接池是一种在初始化阶段创建多个数据库连接并存储起来的技术,以便后续的数据库访问请求可以复用这些已存在的连接,而不是每次请求都新建一个。这种方式减少了创建和关闭连接的开销,提升了系统效率。在这个...
该方法首先将要初始化的数据看做一个复杂对象,通过建造者模式的产品角色来表示,然后利用抽象建造者角色定义数据初始化的先后顺序,使用 Hibernate 框架将各部分数据保存到数据库中。 在应用开发阶段和正式运行...
1. **连接管理**:类可能有一个构造函数用于初始化数据库连接参数,如数据库URL、用户名、密码等,并提供一个方法用于建立和断开与数据库的连接。 2. **SQL执行**:`MyAdo` 可能提供了一个接口,允许用户传递SQL...
1. **构造函数**:初始化类时,可能包含创建数据库连接字符串、打开或关闭数据库连接等操作。连接字符串通常包括数据库路径、用户名(如果需要)和密码。 2. **ExecuteNonQuery()**:执行不返回任何结果集的SQL语句...