`
webcode
  • 浏览: 5953356 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

常用公共类代码一之数据库的连接

 
阅读更多

在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!!

一、数据库的连接,常用的方式有直接将那些要连接的参数放到java类中、将连接参数放到Properties文件中或者放到XML文件中,下面一一为大家描述

1、直接连接:

        普通的配置方式
	public static Connection getConnection(){
		Connection conn=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url="jdbc:mysql://127.0.0.1:3306/xinyuandb";
			String username="root";
			String password="123456";
			conn=DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

2、通过Properties文件创建连接,好处,很灵活,不用在代码里面进行更改

创建jdbc.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://127.0.0.1\:3306/xinyuandb
username=root
password=123456

        从properties文件中读取
	public static Connection getConnection(){
		Connection conn=null;
		Properties p=new Properties();
		try {
			//从当前线程加载
			p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"));
			Class.forName(p.getProperty("driver"));
			conn=DriverManager.getConnection(p.getProperty("url"), p.getProperty("username"), p.getProperty("password"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}

3、通过XML文件读取
  创建jdbc.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<config>
 <jdbc-config>
  <driver>com.mysql.jdbc.Driver</driver>
  <url>jdbc:mysql://127.0.0.1:3306/xinyuandb</url>
  <username>root</username>
  <password>123456</password>
 </jdbc-config>
</config>
创建javaBean类
package com.common.db;

public class JdbcBean {
 private String driver;
 private String url;
 private String username;
 private String password;
 public String getDriver() {
  return driver;
 }
 public void setDriver(String driver) {
  this.driver = driver;
 }
 public String getUrl() {
  return url;
 }
 public void setUrl(String url) {
  this.url = url;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
}

创建XML解析类
package com.common.db;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XmlConfigReader {
	private static XmlConfigReader instance;
	private JdbcBean bean=null;
	//调用构造函数进行XML文件解析
	private XmlConfigReader(){
		SAXReader reader=new SAXReader();
		try {
			Document doc=reader.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.xml"));
			Element root=doc.getRootElement();
			Element first=root.element("jdbc-config");
			String driver=first.element("driver").getText();
			String url=first.element("url").getText();
			String username=first.element("username").getText();
			String password=first.element("password").getText();
			bean=new JdbcBean();
			bean.setDriver(driver);
			bean.setUrl(url);
			bean.setUsername(username);
			bean.setPassword(password);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	public synchronized static XmlConfigReader getInstance(){
		if(instance==null){
			instance=new XmlConfigReader();
		}
		return instance;
	}
	
	public JdbcBean getJdbeanBean(){
		return bean;
	}

}

// 从XML文件中读取配置取得同一Connection
// static Connection conn=null;
// static{
// JdbcBean jdbc=XmlConfigReader.getInstance().getJdbeanBean();
// try {
// Class.forName(jdbc.getDriver());
// conn=DriverManager.getConnection(jdbc.getUrl(), jdbc.getUsername(),jdbc.getPassword());
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }

//从XML文件中读取配置
public static Connection getConnection(){
Connection conn=null;
JdbcBean jdbc=XmlConfigReader.getInstance().getJdbeanBean();
try {
Class.forName(jdbc.getDriver());
conn=DriverManager.getConnection(jdbc.getUrl(), jdbc.getUsername(),jdbc.getPassword());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

有时候我们想取得Connection的单实例,又不会影响到其安全性,我们可以通过线程ThreadLocal来对Connection进行管理:

package com.common.db;

import java.sql.Connection;

/**
 * 线程管理
 * @author Administrator
 *
 */
public class ConnectionManager {
	//使用线程变量对Connection进行管理
	private static ThreadLocal<Connection> local=new ThreadLocal<Connection>();
	
	public static Connection getConnection(){
		Connection conn=local.get();
		if(conn==null){
			conn=DbUtil.getConnection();
			local.set(conn);
		}
		return conn;
	}
	public static void main(String[] args) {
		Connection conn1=ConnectionManager.getConnection();
		Connection conn2=ConnectionManager.getConnection();
		Connection conn3=DbUtil.getConnection();
		Connection conn4=DbUtil.getConnection();
		System.out.println(conn1==conn2);//true
		System.out.println(conn3==conn4);//false
	}
}

这样,数据库操作的公共类基本上实现了,大家在项目中就可以进行调用了,当然,还有一些基本的流的关闭和事物的处理,代码如下:

       public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(Statement pstmt) {
		if (pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(ResultSet rs ) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void beginTransaction(Connection conn) {
		try {
			if (conn != null) {
				if (conn.getAutoCommit()) {
					conn.setAutoCommit(false); //手动提交
				}
			}
		}catch(SQLException e) {}
	}
				
	public static void commitTransaction(Connection conn) {
		try {
			if (conn != null) {
				if (!conn.getAutoCommit()) {
					conn.commit();
				}
			}
		}catch(SQLException e) {}
	}
	
	public static void rollbackTransaction(Connection conn) {
		try {
			if (conn != null) {
				if (!conn.getAutoCommit()) {
					conn.rollback();
				}
			}
		}catch(SQLException e) {}
	}
	
	public static void resetConnection(Connection conn) {
		try {
			if (conn != null) {
				if (conn.getAutoCommit()) {
					conn.setAutoCommit(false);
				}else {
					conn.setAutoCommit(true);
				}
			}
		}catch(SQLException e) {}
	}






分享到:
评论

相关推荐

    Java常用代码方法汇总

    java常用代码方法很适合初学者和刚刚参加工作的程序员,里面包含了常用正则表达式、公共日期类、串口驱动、各种数据库连接、公交换乘算法、 列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤等等很多有用的...

    ThinkPHP连接数据库的方式汇总

    我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库适配器来处理,目前的数据库包括Mysql、MsSQL、PgSQL、Sqlite、Oracle、Ibase以及PDO的支持,如果应用...

    Visual C++ 数据库系统开发完全手册.part2

    11.6 使用Visual C++ 6.0与数据库连接 11.6.1 ADO简介 11.6.2 使用ADO连接数据源前的准备工作 11.6.3 Connection与Recordset 11.6.4 打开数据与关闭数据连接 11.7 如何使用ADO 11.7.1 如何打开记录集 11.7.2 怎样...

    Visual C++ 数据库系统开发完全手册.part1

    11.6 使用Visual C++ 6.0与数据库连接 11.6.1 ADO简介 11.6.2 使用ADO连接数据源前的准备工作 11.6.3 Connection与Recordset 11.6.4 打开数据与关闭数据连接 11.7 如何使用ADO 11.7.1 如何打开记录集 11.7.2 怎样...

    JAVA上百实例源码以及开源项目源代码

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    通用类Gen V3.0使用手册

    这个文件包含了四个基础类,同时设置了是否调试、Application前缀、Application过期时间、Session前缀、数据库连接等,还包含了一个Finish方法用于释放所有对象。 由于VBS的类不支持静态方法,所以四个基础类都声明...

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

    【图书目录】 - SQL Server 数据库企业应用系统开发 第1部分 SQL Server Web应用概述 第1章 Web应用程序概述 1. 1 Web应用系统的主要特点 1. 2 Web应用程序的体系结构 1. 3 SQL Server2000与Web...

    JAVA项目开发全程实录(含电子书和所有源代码)

    1.6.1 编写Dao公共类 22 1.6.2 编写Item类 25 1.7 基础信息模块设计 26 1.7.1 基础信息模块概述 26 1.7.2 基础信息模块技术分析 27 1.7.3 供应商添加实现过程 27 1.7.4 供应商修改与删除实现过程 30 1.7.5 单元测试 ...

    DbUtils应用开发例子--DbUtilsExample.zip

    1.ConnectionProvider.java,数据库连接的提供类。 2.PropertyReader.java,读取配置属性。 3.jdbc.properties 属性配置 三、cn.fansunion.dbutils.example.common,公共资源。 1.DbUtilsExampleBase.java,...

    JAVA上百实例源码以及开源项目

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    javaSE代码实例

    15.1.2 外部类之内创建内部类对象 322 15.1.3 外部类之外创建内部类对象 323 15.1.4 内部类与外部类之间的成员互访 324 15.1.5 内部类与外部类的预定义对象引用this 327 15.2 局部内部类 328 15.2.1 局部...

    《ASP.NET+SQL组建动态网站》随书光盘

    2.6 与SQL Server数据库连接 2.7 操作SQL Server数据库 2.8 在SQL Server数据库中提取数据 本章小结 第3章 服务器控件 3.1 HTML服务器控件 3.1.1 HtmlInputFile控件 3.1.2 HtmlAnchor控件 3.1.3 HtmlTable、...

    net学习笔记及其他代码应用

    要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc() 37.String s = new String(\"xyz\");创建了几个String Object? 答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。...

    ASPNET35开发大全第一章

    3.2.2 创建一个类和其方法 3.2.3 类成员 3.2.4 构造函数和析构函数 3.3 对象的生命周期 3.3.1 类成员的访问 3.3.2 类的类型 3.3.3 .NET的垃圾回收机制 3.4 使用命名空间 3.4.1 为什么要用命名空间 3.4.2 创建命名...

    ASP.NET3.5从入门到精通

    3.2.2 创建一个类和其方法 3.2.3 类成员 3.2.4 构造函数和析构函数 3.3 对象的生命周期 3.3.1 类成员的访问 3.3.2 类的类型 3.3.3 .NET 的垃圾回收机制 3.4 使用命名空间 3.4.1 为什么要用命名空间 3.4.2 创建命名...

    java开源包8

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包10

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包4

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    php网络开发完全手册

    15.3.1 数据库服务器的连接与断开 241 15.3.2 选择数据库 242 15.3.3 执行SQL语句 242 15.3.4 获得查询结果集中的记录数 243 15.3.5 获得结果集中的某一条记录 244 15.3.6 逐行获取结果集中的每一条 15.3.6 记录 245...

Global site tag (gtag.js) - Google Analytics