日期:2014-05-16  浏览次数:20468 次

JDBC .MySQLNonTransientConnectionException异常的几点思考

一、JDBC简介 ? ? ? ?

?

? ? ? ? JDBCJava Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。

二、实例

package org.hj.util.jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * JDBC工具类:关闭流和取得连接
 * @author DingJie
 * @date 2014-5-3
 * @email dingjie_nlp@126.com
 */
public final class JdbcUtil {
	
	private static String driver;
	private static String url;
	private static String user;
	private static String password;
	private static Connection conn;
	//静态块:加载文件
	static{
		Properties props = new Properties();									
		InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("org/hj/config/jdbc/db.properties");
		try {
			props.load(is);
		} catch (Exception e) {
			e.printStackTrace();
		}
		driver = props.getProperty("driver");
		url = props.getProperty("url");
		user = props.getProperty("user");
		password = props.getProperty("password");
	}
	
	//静态块:注册驱动
	static{
		try {
			Class.forName(driver);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 每个线程获取一个唯一jdbc连接
	 * @return
	 */
	public static Connection getMySqlConnection() {
		
		if(conn == null) {
			synchronized (JdbcUtil.class) {
				if(conn == null) {
					try {
						conn = DriverManager.getConnection(url,user,password);
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
			}
		}
		return conn;
	}
	/**
	 * 关闭结果集
	 * @param rs
	 */
	public static void close(ResultSet rs){
		if(rs!=null){
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 关闭SQL语句声明
	 * @param stmt
	 */
	public static void close(Statement stmt){
		if(stmt!=null){
			try {
				stmt.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 关闭数据库连接
	 * @param conn
	 */
	public static void close(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

?

这里有两个连续的Dao操作: