JDBC访问数据库BaseDao工具类

本文详细介绍了如何使用JDBC技术通过BaseDao工具类访问数据库,包括配置Jar包、创建工具类、执行SQL语句及结果处理,适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前景
记得刚刚开始教JDBC技术,发现学生接收能力还可以。可是等讲到使用工具类BaseDao时,就崩溃了。所以就整理了一份使用JDBC访问数据库BaseDao工具类。不说了,直接开干!!!
步骤

1:准备Jar包。mysql-connector-java-5.1.0-bin.jar
注意-----在项目中新建一个文件夹lib,将Jar包放入其中。并且点击Jar包右键Build Path–>Add to Build Path。
新建文件夹

2:在项目中新建一个包---com.bdqn.common。在里面新建一个工具类BaseDao。
package com.bdqn.common;

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.sql.Statement;
import java.util.Properties;

/**
 * 封装JDBC--公有类
 * 
 * @author 凯凯小可爱
 */
public class BaseDao {

	private static String driver = "";
	private static String url = "";
	private static String userName = "";
	private static String password = "";
	protected static Connection conn = null;   //连接对象
	protected static ResultSet result = null;  // 用来接收返回结果
	protected static PreparedStatement pstm = null;

	/**
	 * 1:加载驱动
	 */
	public static void init() {
		try {
			// 获取配置文件中(database.properties)的属性值
			Properties p = new Properties();
			// 获取输入流
			InputStream ist = BaseDao.class.getClassLoader().getResourceAsStream("database.properties");
			// 加载配置文件
			p.load(ist);
			// 获取对应值传递给属性
			driver = p.getProperty("driver");
			url = p.getProperty("url");
			userName = p.getProperty("userName");
			password = p.getProperty("password");
			// 加载驱动
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 2:获取连接
	 * @return
	 */
	public static Connection getConnection() {
		try {
			conn = DriverManager.getConnection(url, userName, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 3:执行SQL,并返回结果
	 * @param sql
	 *            执行SQL
	 * @param obj
	 *            SQL中的参数--数组
	 * @return 返回受影响行数
	 */
	public static int executeUpdate(String sql, Object[] obj) {
		int count = 0;
		init(); // 加载驱动
		conn = getConnection(); // 获取连接
		try {
			// 进行SQL预处理
			pstm = conn.prepareStatement(sql);
			// 进行传参
			for (int i = 0; i < obj.length; i++) {
				pstm.setObject(i + 1, obj[i]);
			}
			// 执行SQL命令,并返回受影响的行数
			count = pstm.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 调用关闭资源的方法
				closeAll(pstm, conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return count;
	}

	/**
	 * 3:执行SQL,并返回结果
	 * @param sql
	 *            执行SQL
	 * @param obj
	 *            SQL中的参数--数组
	 * @return 返回结果---调用后再关闭连接
	 */
	public static ResultSet executeQuery(String sql, Object[] obj) {
		init(); // 加载驱动
		conn = getConnection(); // 获取连接
		try {
			// 进行SQL预处理
			pstm = conn.prepareStatement(sql);
			// 进行传参
			for (int i = 0; i < obj.length; i++) {
				pstm.setObject(i + 1, obj[i]);
			}
			// 执行SQL命令,并返回受影响的行数
			result = pstm.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 4:关闭资源
	 * @param res
	 *            返回的结果
	 * @param stmt
	 *            执行SQL对象
	 * @param conn
	 *            连接对象
	 * @throws SQLException
	 */
	public static void closeAll(ResultSet res, Statement stmt, Connection conn) throws SQLException {
		if (res != null)
			res.close();
		if (stmt != null)
			stmt.close();
		if (conn != null)
			conn.close();
	}

	/**
	 * 4:关闭资源
	 * @param stmt
	 *            执行SQL对象
	 * @param conn
	 *            连接对象
	 * @throws SQLException
	 */
	public static void closeAll(Statement stmt, Connection conn) throws SQLException {
		closeAll(null, stmt, conn);
	}
}

3:新增database.properties配置文件。注意一定要建在src文件夹中。
    driver=com.mysql.jdbc.Driver
	url=jdbc:mysql://localhost:3306/myschool?characterEncoding=utf-8
	userName=root
	password=1234

配置文件的位置

4:新建com.bdqn.entity---->专门用来装实体类的实体包
 
package com.bdqn.entity;

/**
 * 科目类
 * @author 凯凯小可爱
 */
public class Subject {
	private Integer subjectNo;  //科目编号
	private String subjectName; //科目名称
	private Integer classHour;  //课时
	private Integer gradeID;   //所属年级编号
	//无参的构造函数
	public Subject() {
		super();
	}
	public Subject(Integer subjectNo, String subjectName, Integer classHour, Integer gradeID) {
		super();
		this.subjectNo = subjectNo;
		this.subjectName = subjectName;
		this.classHour = classHour;
		this.gradeID = gradeID;
	}
	//省略对属性的封装代码。
}

5:新建com.bdqn.dao---->数据访问层的接口包
      com.bdqn.dao.impl---->数据访问层的接口实现包

这里以科目表为例子
在这里插入图片描述

6:新建com.bdqn.service---->业务逻辑层的接口包
      com.bdqn.service.impl---->业务逻辑层的接口实现包

业务逻辑层的接口类
业务逻辑层的接口实现类

7:新建com.bdqn.test---->测试包中的测试类

使用实体类作为载体传递参数
加油!菜鸟!!!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值