JDBC 运用单例模式连接Oracle数据库

    本章内容是运用单例模式来连接Oracle数据库,其实JDBC中连接Oracle和MySql数据库的代码没多大差别,只是需要导入的包和加载的驱动不一样罢了。

    单例模式就是外部类在调用该类的时候不能直接new一个该类的实例对象,只能通过该类提供的get方法产生该类的对象,这样就能控制该类在任何情况下只能产生一个实例。

    本函数是一个封装类,封装了连接数据库的几个步骤,外部类需要对数据库进行操作的时候只需产生该类的实例并调用该类的executeQuery(String sql)方法或executeUpdate(String sql)方法,参数为SQL语句。executeQuery(String sql)方法返回一个ResultSet结果集,该方法一般用于select语句,executeUpdate(String sql)方法返回影响的行数,一般用于INSERT、UPDATE 或 DELETE 语句。

/*
 * 数据库类,封装对数据库的操作
 */
package com.niit.chenpw.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 数据库类,封装对数据库的操作
 * @author ChenPW
 *
 */
public class DataBase {

	// 声明connection
	private Connection conn = null;
	// 声明ResultSet
	private ResultSet rs;
	// 声明Statement
	private Statement stmt;
	// Oracle驱动
	private String className = "oracle.jdbc.driver.OracleDriver";
	// Oracle连接字符串
	private String url = "jdbc:oracle:thin:@192.168.36.102:1521:ORCL";
	// 数据库用户名
	private String userName = "SCOTT";
	// 数据库密码
	private String password = "root";
	

	// 声明DBManager的私有对象db
	private static DataBase db;
	
	/**
	 * 创建私有构造函数
	 */
	private DataBase() {
		try {
			// 加载驱动
			Class.forName(className);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 提供一个静态方法
	 * @return 返回本类的实例
	 */
	public static synchronized DataBase getDataBase() {
		if (db==null) {
			db=new DataBase();
		}
		return db;
	}
	
	/**
	 * 获取连接
	 * @return conn
	 */
	public Connection getConn() {
		try {
			// 获取连接
			conn = DriverManager.getConnection(url, userName, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 获取Statement记录
	 * @return stmt
	 */
	public Statement getStmt() {
		try {
			// 获取连接
			conn=getConn();
			// 获取Statement记录
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return stmt;
	}

	
	/**
	 * 执行一句查询的sql语句
	 * @param sql sqi语句
	 * @return 结果集
	 */
	public ResultSet executeQuery(String sql) {
		// 利用Statement对象执行参数的sql
		try {
			rs = getStmt().executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	/**
	 * 执行单句INSERT、UPDATE 或 DELETE 语句
	 * @param sql sql语句
	 */
	public void executeUpdate(String sql) {
		//执行SQL语句
		try {
			getStmt().executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 关闭连接
	 */
	public void closed() {
		try {
			if (rs != null)
				rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			if (stmt != null)
				stmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


    对数据库的数据进行操作完以后,千万别忘了关闭数据连接!!!!否则会有很KB的事情发生!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值