JavaWeb与数据库驱动连接类的实现

文章目录

在之前的博客中写过类似的文章,如:
JavaWeb中的数据库连接文件写法(db.properties)

介绍

但是今天博主想继续分享一下这种写法,在原基础上做了很大的改进。仍然需要db.properties这个文件,当然文件的名字你可以随意更改,但是后缀名不能改变哦~。
那么这个类来获取数据库的驱动连接,怎么写呢?在学习JavaWeb课上,教的方法是通过 一个Servlet的监听器web.xml来配置数据库的连接。在经过几天的摸索之后,开始尝试一种更好用更简便的方式来实现。
下面开始上硬货。

实现类

通过下面的类来实现数据库的驱动加载,你只需要在数据访问对象(Data Access Object DAO)设计模式的类中,调用此类中的方法即可!

package dao;

import java.io.IOException;
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.util.Properties;



/**
 *  关于获取数据库连接配置的类
 * @author OriginalCoder
 */
public class DataBaseDAO {
    
    
	private Connection cn=null;
	private PreparedStatement ps=null;
	private ResultSet rs=null;
	private static String driver;
	private static String url;
	private static String username;
	private static String password;
	
	/**
	 * 静态加载资源内存
	 */
	static{
    
    
		try {
    
    
			initial();
		} catch (ClassNotFoundException e) {
    
    
			e.printStackTrace();
		}
	}
	
	/**
	 * 连接初始化
	 * @throws ClassNotFoundException 
	 */
	public static void initial() throws ClassNotFoundException{
    
    
		//读取资源文件,获取连接对象
		//1.properties集合类
		Properties properties=new Properties();
		//方法一
		//2.获取src路径下的文件访问-------》ClassLoader    类加载器
//		ClassLoader classloader = DataBaseDAO.class.getClassLoader();
//		URL res = classloader.getResource("db.properties");
//		String path =  res.getPath();
	3.加载文件
//		properties.load(new FileReader(path));
		
		//方法二
		InputStream is=DataBaseDAO.class.getClassLoader().getResourceAsStream("db.properties");
		try {
    
    
			//加载文件
			properties.load(is);
		} catch (IOException e) {
    
    
			e.printStackTrace();
		}
		//获取属性并赋值
		driver=properties.getProperty("driver");
		url=properties.getProperty("url");
		username=properties.getProperty("username");
		password=properties.getProperty("password");
	}
	
	/**
	 * 获取驱动连接
	 * @return
	 */
	public static Connection getConnection() {
    
    
		Connection cn = null;			//声明数据库连接对象
		try {
    
    
			Class.forName(driver);
			cn = DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
    
    
			e.printStackTrace();
		}
		if (cn == null) {
    
    
			System.err.println("警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:" + driver
					+ "\r\n链接位置:" + url + "\r\n用户/密码" + username + "/" + password);
		}
		return cn;
	}

	
	
	/**
	 * 更新执行结果
	 * @param sql
	 * @return
	 */
	public int executeUpdate(String sql) {
    
    
		int result = 0; 	// 更新数据的记录条数
		try {
    
     
			cn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
			ps = cn.prepareStatement(sql);
			result = ps.executeUpdate(sql); // 执行更新操作
		} catch (SQLException e) {
    
    
			result = 0; // 将保存返回值的变量赋值为0
			e.printStackTrace();
		}
		return result; // 返回保存返回值的变量
	}
	
	/**
	 * 处理结果集
	 * @param sql
	 * @return
	 */
	public ResultSet executeQuery(String sql) {
    
    
		try {
    
    
			cn = getConnection();
			ps = cn.prepareStatement(sql);
			rs = ps.executeQuery(sql);
		} catch (SQLException e) {
    
    
			e.printStackTrace();
		}
		return rs;
	}
	
	
	/**
	 * 释放资源
	 * @param connection
	 * @param ps
	 * @param rs
	 */
	public static void closeAll(Connection cn,PreparedStatement ps,ResultSet rs){
    
    
		if(rs!=null){
    
    
			try {
    
    
				rs.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}
		if(ps!=null){
    
    
			try {
    
    
				ps.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}
		if(cn!=null){
    
    
			try {
    
    
				cn.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}
	}
	
	public static void closeBoth(Connection cn,PreparedStatement ps){
    
    
		if(ps!=null){
    
    
			try {
    
    
				ps.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}
		if(cn!=null){
    
    
			try {
    
    
				cn.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}
	}
	//测试代码
//	public static void main(String[] args)  {
    
    
//		String sql = "Select * from tbUser";
//		DataBaseDAO u=new DataBaseDAO();
//		ResultSet rs=u.executeQuery(sql);
//		try {
    
    
//			if(rs.next()) {
    
    
//				System.out.println(rs.getInt(1));
//			}
//		} catch (SQLException e) {
    
    
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//	}
}

测试类

使用案例
新建一个类
在类中定义一个登录的验证方法,代码如下:

/**
	 * 密码登陆验证
	 * @param uid 		用户id
	 * @param pwd		密码
	 * @return			false
	 */
public boolean loginVerify(String uid,String pwd) {
    
    
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		conn = DataBaseDAO.getConnection();
		String sql = "select * from tbUser where uid='"+uid+"' and pwd='"+pwd+"'";
		try {
    
    
			psmt = conn.prepareStatement(sql);
			rs = psmt.executeQuery();
			if(rs.next()) {
    
    
				return true;
			}
		} catch (SQLException e) {
    
    
			e.printStackTrace();
		} finally {
    
    
			DataBaseDAO.closeAll(conn, psmt, rs);
		}
		return false;
	}

猜你喜欢

转载自blog.csdn.net/qq_44723773/article/details/111472570
今日推荐