代码先锋网 代码片段及技术文章聚合

JAVA学习笔记033——使用Util提高复用和简化代码

技术标签: Java

DBUtil——通用的数据库帮助类,可以简化Dao层的代码量。

帮助类一般建议写在 xxx.util包中

这一篇,我们编写DBUtil将JAVA学习笔记032实例中StudentDao.java代码简化,提高代码的复用性。

即将StudentDao.java 分解为通用复用文件DBUtil和StudentDao.java

 

一、原来的StudentDao.java文件源代码:

package org.student.dao;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
 
import org.student.entity.Student;
 
 
//数据访问层:原子性的增删改查,不能再分
public class StudentDao {
//	private final String URL="jdbd:mysql://localhost:3306/three?serverTimezone=UTC";
//	private final String USERNAME="root";
//	private final String PASSWORD="prolific";
	
	private static final String URL="jdbc:mysql://localhost:3306/three?serverTimezone=UTC";
	private static final String USERNAME="root";
	private static final String PASSWORD="prolific";
 
	
	public boolean isExist(int sno) {//true:此人存在    false:此人不存在。
		return queryStudentBySno(sno)==null? false:true;
		//		if (queryStudentBySno(sno)==null) { //如果是空的,说明此人步存在,false;
//			System.out.println("is Exit=false");
//			return false;
//		}else {
//			System.out.println("is Exit=false");
//			return true;
//		}
	}
	
	//增加学生操作
	public boolean addStudent(Student student) {//zs 23 xa
		Connection connection = null;
		PreparedStatement pstmt =null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
			
			String sql="insert into student values(?,?,?,?)";
			pstmt=connection.prepareStatement(sql);
			pstmt.setInt(1, student.getSno());
			pstmt.setString(2, student.getSname());
			pstmt.setInt(3, student.getSage());
			pstmt.setString(4, student.getSaddress());
			int count=pstmt.executeUpdate();
			if (count>0) 
				return true;
			else
				return false;
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
			return false;
		}catch(SQLException e) {
			e.printStackTrace();
			return false;
		}catch(Exception e) {
			e.printStackTrace();
			return false;
		}finally {
			try {
				if(connection!=null) connection.close();
				if(pstmt!=null) pstmt.close();
			}catch(SQLException e) {
				e.printStackTrace();
				return false;
			}
		}
		
		
	}
	
	//根据学号查学生
	public Student queryStudentBySno(int sno) {
		Connection connection = null;
		PreparedStatement pstmt =null;
		ResultSet rs=null;
		Student student=null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
			String sql="select * from student where sno=?";
			pstmt=connection.prepareStatement(sql);
			pstmt.setInt(1, sno);
			rs=pstmt.executeQuery();
			if(rs.next()) {
				int no = rs.getInt("sno");
				String name = rs.getString("sname");
				int age = rs.getInt("sage");
				String address = rs.getString("saddress");
				student=new Student(no,name,age,address);
				
			}
			return student;
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}catch(SQLException e) {
			e.printStackTrace();
			return null;
		}catch(Exception e) {
			e.printStackTrace();
			return null;
		}finally {
			try {
				if(rs!=null) rs.close();
				if(connection!=null) connection.close();
				if(pstmt!=null) pstmt.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//查询全部学生
	public List<Student> queryAllStudents() {
		List<Student> students=new ArrayList<>();
		Connection connection = null;
		PreparedStatement pstmt =null;
		ResultSet rs=null;
		Student student=null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
			String sql="select * from student";
			pstmt=connection.prepareStatement(sql);
			rs=pstmt.executeQuery();
			while(rs.next()) {
				int no = rs.getInt("sno");
				String name = rs.getString("sname");
				int age = rs.getInt("sage");
				String address = rs.getString("saddress");
				student=new Student(no,name,age,address);
				students.add(student);
			}
			return students;
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}catch(SQLException e) {
			e.printStackTrace();
			return null;
		}catch(Exception e) {
			e.printStackTrace();
			return null;
		}finally {
			try {
				if(rs!=null) rs.close();
				if(connection!=null) connection.close();
				if(pstmt!=null) pstmt.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	
	//根据学号 删除学生
	public boolean deleteStudentBySno(int sno) {
		Connection connection = null;
		PreparedStatement pstmt =null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
			
			String sql="delete from student where sno=?";
			pstmt=connection.prepareStatement(sql);
			pstmt.setInt(1, sno);
			int count=pstmt.executeUpdate();
			if (count>0) 
				return true;
			else
				return false;
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
			return false;
		}catch(SQLException e) {
			e.printStackTrace();
			return false;
		}catch(Exception e) {
			e.printStackTrace();
			return false;
		}finally {
			try {
				if(connection!=null) connection.close();
				if(pstmt!=null) pstmt.close();
			}catch(SQLException e) {
				e.printStackTrace();
				return false;
			}
		}
	}
	
	//根据学好修改学生:根据sno知道待修改的人,在把这个人修改成student
	public boolean updateStudentBySno(int sno,Student student) {
		Connection connection = null;
		PreparedStatement pstmt =null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
			
			String sql="update student set sname=?,sage=?,saddress=? where sno=?";
			pstmt=connection.prepareStatement(sql);
			pstmt.setString(1, student.getSname());
			pstmt.setInt(2, student.getSage());
			pstmt.setString(3, student.getSaddress());
			pstmt.setInt(4, sno);
			int count=pstmt.executeUpdate();
			if (count>0) 
				return true;
			else
				return false;
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
			return false;
		}catch(SQLException e) {
			e.printStackTrace();
			return false;
		}catch(Exception e) {
			e.printStackTrace();
			return false;
		}finally {
			try {
				if(connection!=null) connection.close();
				if(pstmt!=null) pstmt.close();
			}catch(SQLException e) {
				e.printStackTrace();
				return false;
			}
		}
	}
	
}

 

 

二、修改后的DBUtil.java和StudentDao.java文件源代码:

1.DBUtil.java

package ort.student.util;
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.ArrayList;
import java.util.List;

import org.student.entity.Student;

//通用的数据库操作方法
public class DBUtil {
	//通用的增删改
	private static final String URL="jdbc:mysql://localhost:3306/three?serverTimezone=UTC";
	private static final String USERNAME="root";
	private static final String PASSWORD="prolific";

	public static Connection connection = null;
	public static PreparedStatement pstmt =null;
	public static ResultSet rs=null;

	
	//获取链接
	public static Connection getConnection() throws ClassNotFoundException, SQLException{
		Class.forName("com.mysql.cj.jdbc.Driver");
		return connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
	}
	
	//关闭
	public static void closeAll(ResultSet rs,Statement stmt,Connection connection) {
		try {
			if(rs!=null) rs.close();
			if(connection!=null) connection.close();
			if(pstmt!=null) pstmt.close();
		}catch(SQLException e) {
			e.printStackTrace();
		}
	}
	
	//获取PreparedStatement
	public static PreparedStatement createPreParedStatement(String sql,Object[] params) throws SQLException, ClassNotFoundException {
		pstmt=getConnection().prepareStatement(sql);  //获取链接
		if (params!=null) {
			for (int i=0;i<params.length;i++) {
				pstmt.setObject(i+1, params[i]);
			}
		}
		return pstmt;
	}
	

	//通用的增删改
	public static boolean executeUpdate(String sql,Object[] params) {
		PreparedStatement pstmt =null;
		try {
			pstmt=createPreParedStatement(sql,params);
			int count=pstmt.executeUpdate();
			if (count>0) 
				return true;
			else
				return false;

		}catch(SQLException e) {
			e.printStackTrace();
		}catch(Exception e) {
			e.printStackTrace();
			return false;
		}finally {
			closeAll(null,pstmt,connection);
		}
		return false;
	}
	
	//通用的查
	public static ResultSet executeQuery(String sql,Object[] params) throws ClassNotFoundException, SQLException {
			pstmt=createPreParedStatement(sql,params);
			rs=pstmt.executeQuery();
			return rs;
	}
}

2.StudentDao.java

package org.student.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.student.entity.Student;

import ort.student.util.DBUtil;


//数据访问层:原子性的增删改查,不能再分
public class StudentDao {
	private static final String URL="jdbc:mysql://localhost:3306/three?serverTimezone=UTC";
	private static final String USERNAME="root";
	private static final String PASSWORD="prolific";
	
	public boolean isExist(int sno) {//true:此人存在    false:此人不存在。
		return queryStudentBySno(sno)==null? false:true;
	}
	
	//根据学号查学生
	public Student queryStudentBySno(int sno){
		String sql="select * from student where sno=?";
		Connection connection = null;
		PreparedStatement pstmt =null;
		ResultSet rs=null;
		Student student=null;
		Object[] params= {sno};
		try {
//			Class.forName("com.mysql.cj.jdbc.Driver");
//			connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
//			pstmt=connection.prepareStatement(sql);
//			pstmt.setInt(1, sno);
//			rs=pstmt.executeQuery();
			
			rs=DBUtil.executeQuery(sql,params);
			if(rs.next()) {
				int no = rs.getInt("sno");
				String name = rs.getString("sname");
				int age = rs.getInt("sage");
				String address = rs.getString("saddress");
				student=new Student(no,name,age,address);
				
			}
			return student;
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}catch(SQLException e) {
			e.printStackTrace();
			return null;
		}catch(Exception e) {
			e.printStackTrace();
			return null;
		}finally {
			DBUtil.closeAll(rs, pstmt, connection);
		}
	}
	
	//查询全部学生
	public List<Student> queryAllStudents() {
		List<Student> students=new ArrayList<>();
		PreparedStatement pstmt =null;
		ResultSet rs=null;
		Student student=null;
		try {
			String sql="select * from student";
			rs=DBUtil.executeQuery(sql,null);
			while(rs.next()) {
				int no = rs.getInt("sno");
				String name = rs.getString("sname");
				int age = rs.getInt("sage");
				String address = rs.getString("saddress");
				student=new Student(no,name,age,address);
				students.add(student);
			}
			return students;
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}catch(SQLException e) {
			e.printStackTrace();
			return null;
		}catch(Exception e) {
			e.printStackTrace();
			return null;
		}finally {
				DBUtil.closeAll(rs,pstmt,DBUtil.connection);
//			try {
//				if(rs!=null) rs.close();
//				if(DBUtil.connection!=null) DBUtil.connection.close();
//				if(pstmt!=null) pstmt.close();
//			}catch(SQLException e) {
//				e.printStackTrace();
//			}
		}
	}
	
	//增加学生操作
	public boolean addStudent(Student student) {//zs 23 xa
		String sql="insert into student values(?,?,?,?)";
		Object[] params= {student.getSno(),student.getSname(),student.getSage(),student.getSaddress()};
		return DBUtil.executeUpdate(sql,params);
	}
	
	//根据学号 删除学生
	public boolean deleteStudentBySno(int sno) {
		String sql="delete from student where sno=?";		
		Object[] params= {sno};
		return DBUtil.executeUpdate(sql,params);
	}
	
	//根据学号修改学生:根据sno知道待修改的人,在把这个人修改成student
	public boolean updateStudentBySno(int sno,Student student) {
		String sql="update student set sname=?,sage=?,saddress=? where sno=?";
		Object[] params=  {student.getSname(),student.getSage(),student.getSaddress(),sno};
		return DBUtil.executeUpdate(sql,params);
	}
}

以上替换代码经验证,增删改查均运行正常。

留待学习的地方:try{ }catch{}finalll{}结构的使用,和常用的方法。

 

版权声明:本文为weixin_42844704原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42844704/article/details/108372370

智能推荐

使用BaseServlet提高Servlet的代码复用性

第一次接触这种设计思路,首先,设置一个BaseServlet,它继承HttpServlet. 在BaseServlet里面doGet方法中,获取request中的method字段,通过反射执行这个方法,具体代码实现,可以看 其他的Servlet都继承BaseServlet,因为继承BaseServlet,不需要重写doGet方法,所以将自动创建的所有东西删除即可,然后在里面创建实现各种功能的方法....

JAVA工作常用代码笔记——供复用

目录 业务代码 1、递归查询树结构 配置文件 业务代码 1、递归查询树结构 使用JAVA8新特性:stream流 配置文件...

Python学习——函数和代码复用

Python学习——函数和代码复用 1.七段数码管绘制 要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮...

猜你喜欢

使用MapStruct和Lombok简化代码

一、MapStruct介绍 这是什么? MapStruct 是一个代码生成器,它极大地简化了基于约定而不是配置方法的 Java Bean 类型之间映射的实现。 生成的映射代码使用普通方法调用,因此快速、类型安全且易于理解。 为什么? 多层应用程序通常需要在不同的对象模型(例如实体和 DTO)之间进行映射。编写此类映射代码是一项繁琐且容易出错的任务。MapStruct旨在通过尽可能地自动化来简化这项...

java中使用lambda简化代码

前言 读过ibm上lambda系列的文章这里,做下总结 使用IntStream取代简单for循环 对于简单的for循环可以IntStream取代,如下 尽量去除冗余信息 lambda可以自己推断部分参数,因此可以省略一些信息 传递形参为实参 传递形参给目标 传递构造函数调用 传递多个实参 总结 一般来说对于可以简化的语句,idea会给出提示,有一部分需要我们有意识的去那样写,唉,lambda真香...

Spring 学习笔记(一):简化 Java 开发

今天开始,Spring 笔记开始更新,主要还是作为阅读《Spring 实战》(第4版)的学习笔记,该系列的内容大多也是引用自该书中。 虽然工作中大量接触 Spring,但回顾发现自己只是知道怎么做,而并没有去深究,导致有时候遇到问题不知从何下手,所以想要系统学习 Spring。 Spring 的使命便是如标题所说:简化 Java 开发。具体怎么简化的呢?分为以下四个方面: 基于 POJO 的轻量级...

servlet和jsp核心编程(第2版)第十六章 简化对Java代码的访问:jsp2.0表达式语言学习笔记...

[size=x-large]第十六章:简化对Java代码的访问:jsp2.0表达式语言[/size] [size=medium]1[/size].为了计算和输出存储在标准位置的java对象的值,JSP2.0引入一种简捷的语言。表达式语言(EL),另一个特性是用JSP语法。 [size=medium]2[/size].<警告>JSP表达式语言不能用在只支持JSP1.2或更早版本的服务器中...

JAVA-JUC的代码学习笔记-练习可以提高,java代码

自己学习的时候可以自定义注解可以学习用,标志方便清晰; 注解1,不推荐写法 注解2 备注推荐的注解写法 注解3 线程安全的注解写法 注解4 线程不安全的注解写法 使用SpringBoot的Application来进行运行 线程不安全的一个测试类 可以使用SpringBoot的嵌入式的Servlet的Filter模式进行过滤器进行 自定义定义 SpringBoot的自定义拦截器 进行运行主类-Spr...