【java】基于MVC三层架构中的数据库增/删/改/查通用Dao类的操作(示例+源码+注释)

建立两个文件,一个是数据库增/删/改/查Dao通用基类BaseDao.java,一个是数据库增/删/改/查的操作mysql.java。两个文件分别在src目录下不同的【包】内,注意不在一个包内的调用方法。

一、建立数据库增/删/改/查Dao通用基类(BaseDao.java)

package Suoker.Dao;

import java.sql.*;

import suoker_web.Config_mysql;

// 操作数据库增/册/改/查的基类

public class BaseDao {

	Connection connection = null;
	PreparedStatement pst=null;
	Statement st=null;
	ResultSet rs=null;
	
	// ======== 获取数据库连接
	public boolean getconnection(){
	
	
	// 读取sql.properties配置文件中jdbc.driver.class值  ##配置文件方法参考:https://blog.csdn.net/dxnn520/article/details/112615586
	
	String driver=Config_mysql.getInstance().getString("jdbc.driver.class"); // Jdbc数据库驱动
	String url=Config_mysql.getInstance().getString("jdbc.connection.url");  // 数据库名称地址
	String username=Config_mysql.getInstance().getString("jdbc.connection.username"); // 数据库:用户名 
	String password=Config_mysql.getInstance().getString("jdbc.connection.password"); // 数据库:用户密码

		try {
			// 载入数据库驱动
			Class.forName(driver);
			// 建立数据库连接getconnection(jdbc:mysql://地址:端口号/数据库名,数据库用户名,密码)
			connection = DriverManager.getConnection(url,username,password);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	
	}

	// ======== 查询数据表

	public ResultSet excuteQuery(String sql,Object[] params) // 对象数组作为参数  Object[] params 
	{

		if (this.getconnection()){
			try {
				pst=connection.prepareStatement(sql);
				// 遍历读取Object[] params的每一个值
				for(int i=0;i<params.length;i++){
					pst.setObject(i+1,params[i]); // 取参数值(变量值),赋到sql语句中的?里。
				}
				rs=pst.executeQuery(); // 把查询结果赋值到rs中
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return rs;  // 返回查询结果
	}
	
	
	// ======== 增、删、改
	
	public int excuteUpdate(String sql,Object[] params)  // 对象数组作为参数  Object[] params 
	{
		int updateRows=0;  // 默认返回0,失败返回0
		if(this.getconnection()){
			try {
				pst=connection.prepareStatement(sql);
    
				// 遍历读取Object[] params的每一个值
				for(int i=0;i<params.length;i++){
					pst.setObject(i+1,params[i]); // 取参数值(变量值),赋到sql语句中的?里。
				}
			    // ---- 类似下面的语句
				// String sql="update aaa set Name=?";
				// st=con.prepareStatement(sql8);
				// st.setString(1,z_name); // 把变量赋值到Sql语句中,第一个问号

			updateRows=pst.executeUpdate();
			
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
		return updateRows;
	}
	
	// =========== 释放数据库连接资源
	public boolean close(){
		if(rs !=null)
		{
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if(pst != null)
		{
			try {
				pst.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
			
		if(connection != null)
		{
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
			
			
		return true;
		
	}
		
		
	
}

二、数据库增/删/改/查的操作mysql.java

package suoker_web;
import Suoker.Dao.BaseDao; //从另一个包里调用BaseDao类(数据库操作基类) 
import java.sql.*;
import java.util.Date;
public class MySql {

	public void getSelect()
	{
		
		BaseDao basedao=new BaseDao();

		// =========== 数据库查询 
		
// 		String sql="select * from aaa ";
//		Object[] params={};
        String name_8="张飞";
 		String sql="select * from aaa where Name=?";
		Object[] params={name_8};
		ResultSet rs_grid=basedao.excuteQuery(sql,params);
		// 遍历读取Sql的数据
		System.out.println("======== 查询全部  ========\n");
		try {
			while(rs_grid.next()){
				
				String name=rs_grid.getString("Name");
				String old=rs_grid.getString("Old");
				System.out.println("姓名:"+name+"    年龄:"+old);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
		}	
		
		// =========== 增加记录 
		
		System.out.println("======== 删除张飞  \n");
		String sql1="INSERT INTO aaa(Name,Old) VALUES (?,?)";
		Object[] params1={"张飞",30};

		int s=basedao.excuteUpdate(sql1,params1); 
		if(s==1){
			System.out.println("增加【张飞】成功!");
		}else{
			System.out.println("增加【张飞】失败!");
		}
	
		// =========== 删除记录 
		
		System.out.println("======== 增加张飞  \n");
		String a_name="张飞";
		int a_old=30;
		String sql2="delete from aaa where Name=? and Old=?";
		Object[] params2={"张飞",30};

		int s2=basedao.excuteUpdate(sql2,params2); 
		if(s2==1){
			System.out.println("删除【张飞】成功!");
		}else{
			System.out.println("删除【张飞】失败!");
		}
		

		// =========== 更新记录 
		
		System.out.println("======== 更新数据  \n");
		String name_1="张飞";
		String name_2="刘备";
		String sql_3="update aaa set Name=? where Name=?";
		Object[] params3={name_2,name_1};
		// String sql_3="update aaa set Name='刘备' where Name='张飞'";
		// Object[] params3={};

		int s3=basedao.excuteUpdate(sql_3,params3); 
		if(s3==1){
			System.out.println("更新【张飞】成功!");
		}else{
			System.out.println("更新【张飞】失败!");
		}
		
		// 关闭数据库连接
		boolean aaa=basedao.close();
		if(aaa!=true){
			System.out.println("关闭数据库失败!");
			return;
		}else{
			System.out.println("关闭数据库成功!");
			
		}		
		
	}
	
	public static void main(String[] args) {
		
		
		MySql getSelect = new MySql(); // 声明当前类
		getSelect.getSelect(); // 执行方法

	}

}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敦厚的曹操

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值