package com.adam.dev.utils;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* @author adam.胡升阳
*
*/
public class JdbcByPropertiesUtil {
private static String filePath = "jdbc.properties";
private static JdbcByPropertiesUtil instance = null;
public JdbcByPropertiesUtil() {
super();
}
/**
* 单例方式创建对象
* @return
*/
public static JdbcByPropertiesUtil getInstance() {
if (instance == null) {
synchronized (JdbcByPropertiesUtil.class) {
if (instance == null) {
instance = new JdbcByPropertiesUtil();
}
}
}
return instance;
}
/**
* 读取properties文件中 数据库连接信息
* @param filePath
* add 2012-4-17
*/
public static Properties readPropertiesFile(){
String realFilePath = Thread.currentThread().getContextClassLoader().getResource("").getPath()+filePath;
Properties pros = new Properties();
try {
InputStream is = new BufferedInputStream(new FileInputStream(realFilePath));
pros.load(is);
} catch (Exception e) {
e.printStackTrace();
}
return pros;
}
/**
* 注册驱动
* 静态代码块 用于启动web服务器时加载驱动
*/
static{
Properties pros = readPropertiesFile();
String className = (String) pros.get("className");
try {
Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
* modify 2012-4-17
* @param con
* @return
*/
public Connection getConnection(){
Properties pros = readPropertiesFile();
String url = (String) pros.get("url");
String user = (String) pros.get("user");
String password = (String) pros.get("password");
Connection conn = null;
try {
conn = DriverManager.getConnection(url,user,password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 依次关闭ResultSet、Statement、Connection
* 若对象不存在则创建一个空对象
* @param rs
* @param st
* @param pst
* @param conn
*/
public void close(ResultSet rs,Statement st,Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
}
/**
* 新增、修改、删除、查询记录(也可以改为有结果集ResultSet返回的查询方法)
* @param sql
* @throws
*/
public void execute(String sql){
JdbcByPropertiesUtil jbpu = getInstance();
Connection conn = null;
PreparedStatement pst = null;
try {
conn = jbpu.getConnection();
conn.setAutoCommit(false);
pst = conn.prepareStatement(sql);
pst.execute();
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally{
//Statement st = null;
ResultSet rs = null;
jbpu.close(rs, pst, conn);
}
}
/**
* 新增、修改、删除记录
* @param sql
* @throws
*/
public void executeUpdate(String sql) {
JdbcByPropertiesUtil jbpu = getInstance();
Connection conn = null;
PreparedStatement pst = null;
try {
conn = jbpu.getConnection();
conn.setAutoCommit(false);
pst = conn.prepareStatement(sql);
pst.executeUpdate();
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally{
//Statement st = null;
ResultSet rs = null;
jbpu.close(rs, pst, conn);
}
}
}
分享到:
相关推荐
下面将详细介绍如何使用Eclipse作为开发环境,通过编写一个JDBC工具类来连接MySQL数据库,并实现基本的增删改查功能。 首先,我们需要引入MySQL的JDBC驱动,也就是`mysql-connector.jar`。这个库文件包含了连接...
本篇文章将详细讲解如何创建一个JDBC连接Oracle的工具类,以及在实际应用中需要注意的事项。 首先,我们需要了解JDBC的基本概念。JDBC是Java与数据库交互的一组接口和类,它允许Java程序通过SQL语句来操作数据库。...
一个简单的JDBC数据库连接工具类可能包含以下功能: ```java public class JdbcUtils { private static final String URL = "jdbc:mysql://localhost:3306/test"; private static final String USER = "root"; ...
在实际开发中,为了提高代码的可重用性和减少重复性工作,我们通常会创建一个JDBC工具类,将数据库连接、关闭资源等操作封装起来。以下是一个关于JDBC工具类的详细解释。 1. **JDBC工具类的作用** - 提高代码的可...
- 在Java代码中,通过工具类的静态方法获取连接,执行SQL操作,最后记得关闭连接。 ```java DB db = DB.getInstance(); // 获取单例 Connection conn = db.getConnection(); // 获取连接 try { Statement stmt = ...
在本项目中,“jdbc连接工具类 单例连接模式,进度1”指的是创建了一个使用单例设计模式的JDBC连接工具类,以优化数据库连接的管理和复用,提高程序性能。下面我们将深入探讨这两个关键概念。 首先,让我们了解一下...
本资源"JDBC简单地工具类.rar"包含了一些基础的JDBC代码示例,适合初学者用来了解和学习JDBC的基本用法。 1. **JDBC驱动注册与连接** 在使用JDBC时,首先需要加载并注册对应的数据库驱动,通常通过`Class.forName...
数据库连接池在初始化时会创建一定数量的数据库连接并保存起来,当应用程序需要连接时,可以从池中获取一个已存在的连接,而不是每次都去新建,用完后也不立即关闭,而是归还给连接池。这样可以显著减少建立和释放...
以下是一个简单的JDBC工具类的概述,以`jdbcmode.java`为例: 1. **数据库连接** - 使用`java.sql.DriverManager`类加载数据库驱动并建立连接。在`getConnection`方法中,通过`Class.forName`加载指定的数据库驱动...
2. **建立连接**:使用`java.sql.DriverManager`类的`getConnection()`方法建立与MySQL的连接。提供数据库URL、用户名和密码: ```java String url = "jdbc:mysql://localhost:3306/mydatabase"; String username...
**jdbc连接池c3p0工具包** 在Java开发中,数据库操作是常见的任务,而JDBC(Java Database Connectivity)是Java与数据库交互的标准接口。然而,直接使用JDBC进行数据库连接可能会导致性能问题,因为每次连接和断开...
在本篇文章中,我们将深入探讨JDBC工具类的核心概念、主要功能以及如何使用它来连接和操作MySQL数据库。 1. **JDBC基础** JDBC提供了一组标准接口和类,使得Java开发者能够通过统一的方式与各种关系型数据库进行...
工具类通常会提供一个静态方法来获取数据库连接,通过连接池实现连接的复用。连接池如C3P0、HikariCP或Apache DBCP等,它们可以预先配置一定数量的连接,避免频繁创建和销毁连接,从而提高性能。 2. **预编译SQL...
应用程序在需要时可以从连接池中获取连接,使用完毕后归还,而不是每次操作都建立新的连接。这降低了频繁创建和关闭连接的开销,提高了系统效率。 在提供的资源中,`DatabasePool.conf`文件是配置数据库连接池的...
本文将详细解释如何使用JDBC连接MySQL数据库,以及如何创建一个工具类来简化数据库连接的管理。 首先,我们需要引入MySQL的JDBC驱动,这通常是一个jar文件,如`mysql-connector-java-5.1.20-bin.jar`。这个驱动包...
在使用JDBC连接Oracle数据库时,首先需要在项目的类路径中包含对应的ojdbc驱动jar文件。这里我们有ojdbc6_g.jar、ojdbc5_g.jar、ojdbc6.jar和ojdbc5.jar四个文件。其中,“_g”后缀通常表示包含了调试信息,对于开发...
1. **JDBC工具类**:JDBC工具类通常封装了数据库连接、预编译SQL语句、执行SQL、关闭资源等常见操作,以减少重复代码,提升开发效率。`connJdbcUtil`可能是一个实现了这些功能的Java类。 2. **数据库连接配置**:...
因此,JDBC工具类通常会包含数据库连接池(如C3P0、HikariCP或Apache DBCP)的配置和管理,以实现连接的复用,提高性能并减少系统开销。 2. **自动处理事务**:工具类可以封装开始事务、提交事务和回滚事务的逻辑,...
2. **添加驱动到项目**:将下载的JDBC驱动jar文件(如mssql-jdbc-<version>.jar)添加到Java项目的类路径中。 3. **建立连接**:使用`java.sql.DriverManager`类的`getConnection()`方法建立连接,需要提供服务器...
2. **PoolableConnection**: 这是DBCP中管理的数据库连接对象,它包装了实际的JDBC Connection,增加了连接池管理的功能,如自动关闭、回池等。 3. **PoolManager**: 负责连接池的初始化、扩展以及清理工作,管理...