【JDBC】----Date工具类和DAO数据访问对象

分享第二十三篇励志语句

人生无常,最重要的不是你所处的位置,而是你所朝的方向。你不能决定生命的长度,但你可以控制它的宽度;你不能左右天气,但你可以改变心情;你不能改变容貌,但你可以展现笑容;你不能控制他人,但你可以掌握自己;你不能预知明天,但你可以利用今天;你不能样样顺利,但你可以事事尽力。

【JDBC】----Date工具类和DAO数据访问对象_第1张图片 

 

目录

分享第二十三篇励志语句

一:Date工具类

1 问题描述

2 与日期时间相关的类

2.1 java.util.Date

2.2 java.sql.Date

2.3 SimpleDateFormat

3 封装DateUtils工具类

二、DAO数据访问对象(Data Access Object)

1 创建表teacher

2 封装实体类Teacher

3 编写TeacherDaoImpl类

4 测试

4.1 测试增加数据

4.2 测试删除数据

4.3 测试修改数据

4.4 测试查询单个

4.5 测试查询所有

今天的分享就到此结束了

创作不易点赞评论互关三连


一:Date工具类

1 问题描述

(1)数据库中存储的日期时间类型为java.sql.Date类型,Java应用层存储的日期时间类型为java.util.Date类型。

(2)从数据库获取的日期时间类型数据可以直接赋值给Java应用层的日期时间类型变量,因为java.sql.Date类是java.util.Date类的子类,向上转型(父类引用指向子类对象)是可以直接赋值的。

(3)Java应用层的日期时间类型数据不能直接存储在数据库中,需要进行相应的转换。

(4)preparedStatement.setDate(int parameterIndex, Date x)中Date为java.sql.Date类型。

2 与日期时间相关的类

2.1 java.util.Date

(1)Java语言常规应用层面的日期时间类型,可以通过字符串创建对应的日期时间对象,但是已经过时。常用构造方法如下(很多构造方法已经过时):

【JDBC】----Date工具类和DAO数据访问对象_第2张图片

 

(2)不能直接通过JDBC将java.util.Date类型数据插入到数据库中。

2.2 java.sql.Date

(1)不可以通过字符串创建对应的时间对象,只能通过毫秒值创建对象(1970年1月1日0点0分0秒至今的毫秒值),常用构造方法如下:

(2)可以直接通过JDBC将java.util.Date类型数据插入到数据库中。

2.3 SimpleDateFormat

(1)SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

(2)SimpleDateFormat使得可以选择任何用户定义的日期-时间格式的模式。

(3)SimpleDateFormat应用如下:

package com.cxyzxc.examples04;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatTest {

	public static void main(String[] args) {

		// 指定日期格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		try {
			String strDate1 = "2022-10-22";
			// 将字字符串解析成日期类型(java.util.Date)
			java.util.Date date1 = sdf.parse(strDate1);
			System.out.println("字符串解析成日期:" + date1);

			Date date2 = new Date();
			String strDate2 = sdf.format(date2);
			System.out.println("日期解析成字符串:" + strDate2);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}

 

3 封装DateUtils工具类

package com.cxyzxc.examples04;

import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * 日期时间工具类DateUtils
 * 
 * @author 程序员张小厨
 * 
 */
public class DateUtils {

	private static final SimpleDateFormat SIMPLEDATEFORMAT = new SimpleDateFormat("yyyy-MM-dd");

	// 字符串转换为java.util.Date类型日期时间
	public static java.util.Date strDateToUtilDate(String strDate) {
		try {
			return SIMPLEDATEFORMAT.parse(strDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	// java.util.Date类型日期时间转换为java.sql.Date类型日期时间
	public static java.sql.Date utilDateToSqlDate(java.util.Date date) {
		// long date.getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT以来此 Date对象表示的毫秒数
		return new java.sql.Date(date.getTime());
	}

	// java.util.Date类转换为字符串类型
	public static String utilDateToString(java.util.Date date) {
		return SIMPLEDATEFORMAT.format(date);
	}

}

二、DAO数据访问对象(Data Access Object)

(1)DAO(Data Access Object) ,数据访问对象,是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。

(2)之前代码中,业务逻辑代码和对数据库的访问操作代码全部写在一个类中,比较混乱,使用DAO实现业务逻辑与数据库访问相分离。

  • 对同一张表的所有操作(增删改查,定义成方法)封装在XxxDaoImpl类中。Xxx表示实体类名

  • 根据增删改查的不同功能实现具体的方法(insert、update、delete、select、selectAll)。

【JDBC】----Date工具类和DAO数据访问对象_第3张图片

1 创建表teacher

1、创建一张教师表teacher,表的字段如下:

tid,教师编号,主键、自动增长。

name,教师姓名,字符串类型、非空。

age,年龄,int类型、非空。

bornDate,Date类型

email,邮箱,字符串类型,非空

address,住址,字符串类型,非空

CREATE TABLE IF NOT EXISTS `teacher`(
    `tid` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(10) NOT NULL,
    `age` INT NOT NULL,
    `bornDate` DATE,
    `email` VARCHAR(30) NOT NULL,
    `address` VARCHAR(30) NOT NULL
);

2、向teacher表中插入两条数据:

INSERT INTO `teacher` VALUES(1001,'zhangsan',29,'1993-11-26','[email protected]','安徽合肥蜀山区长江西路132号');
INSERT INTO `teacher` VALUES(1002,'lisi',31,'1991-9-16','[email protected]','安徽合肥新站区环城西路12号');

2 封装实体类Teacher

创建entity实体类Teacher类,封装属性,添加无参构造方法和有参构造方法,添加getXxx()/setXxx()方法

package com.cxyzxc.examples02;

import java.util.Date;

/**
 * entity实体类Teacher
 * 
 * @author 程序员张小厨
 * 
 */
public class Teacher {
	/** 教师编号 */
	private int tid;
	/** 姓名 */
	private String name;
	/** 年龄 */
	private int age;
	/** 出生日期 */
	private Date bornDate;
	/** 邮箱 */
	private String email;
	/** 住址 */
	private String address;

	// 无参构造方法
	public Teacher() {
		super();
	}

	// 有参构造方法
	public Teacher(String name, int age, Date bornDate, String email,
			String address) {
		super();
		this.name = name;
		this.age = age;
		this.bornDate = bornDate;
		this.email = email;
		this.address = address;
	}

	public Teacher(int tid, String name, int age, Date bornDate, String email,
			String address) {
		super();
		this.tid = tid;
		this.name = name;
		this.age = age;
		this.bornDate = bornDate;
		this.email = email;
		this.address = address;
	}

	// getXxx()/setXxx()方法
	public int getTid() {
		return tid;
	}

	public void setTid(int tid) {
		this.tid = tid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBornDate() {
		return bornDate;
	}

	public void setBornDate(Date bornDate) {
		this.bornDate = bornDate;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	// 重写Object类中的toString()方法
	@Override
	public String toString() {
		return "tid=" + tid + ", name=" + name + ", age=" + age + ", bornDate="
				+ bornDate + ", email=" + email + ", address=" + address;
	}
}

 

 

3 编写TeacherDaoImpl类

编写TeacherDaoImpl类,提供增删改查方法,使用JDBC完成开发功能。

package com.cxyzxc.examples04;

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

/**
 * 
 * @author 程序员张小厨
 * 
 */
public class TeacherDaoImpl {
	/*
	 * (1)该类中提供对teacher表进行增、删、改、查单个、查所有5个方法。
	 * 
	 * (2)该类中的代码只做数据库访问操作,不做任何业务逻辑操作。
	 * 
	 * (3)该类只对数据库一张表进行操作,从而实现复用
	 */

	// 新增:向teacher表中插入一条数据(一条数据对应一个Teacher对象),插入成功,返回一个受影响行数值(int类型)
	public int insert(Teacher teacher) {

		Connection connection = null;
		PreparedStatement preparedStatement = null;
		String sql = "insert into `teacher`(name,age,bornDate,email,address) values(?,?,?,?,?);";

		connection = DBUtils.getConnection();

		try {
			preparedStatement = connection.prepareStatement(sql);
			// 绑定参数,赋值
			preparedStatement.setString(1, teacher.getName());
			preparedStatement.setInt(2, teacher.getAge());
			//将java.util.Date类型日期时间转换为java.sql.Date类型,然后插入到数据库中
			preparedStatement.setDate(3, DateUtils.utilDateToSqlDate(teacher.getBornDate()));
			preparedStatement.setString(4, teacher.getEmail());
			preparedStatement.setString(5, teacher.getAddress());
			// 执行SQL语句,返回受影响的行数值
			int result = preparedStatement.executeUpdate();
			// 将结果返回给调用者
			return result;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.closeAll(connection, preparedStatement, null);
		}
		return 0;
	}

	// 删除:根据教师tid删除一条数据,删除成功,返回一个受影响行数值(int类型)
	public int delete(int tid) {

		Connection connection = null;
		PreparedStatement preparedStatement = null;
		String sql = "delete from teacher where tid = ?;";

		connection = DBUtils.getConnection();

		try {
			preparedStatement = connection.prepareStatement(sql);
			// 绑定参数,赋值
			preparedStatement.setInt(1, tid);
			// 执行SQL语句,返回受影响的行数值
			int result = preparedStatement.executeUpdate();
			// 将结果返回给调用者
			return result;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.closeAll(connection, preparedStatement, null);
		}
		return 0;
	}

	// 修改:修改teacher表中的数据,可能对任意的一个字段进行修改,所以方法中直接传递一个对象进行修改,修改成功,返回一个受影响行数值(int类型)
	public int update(Teacher teacher) {

		Connection connection = null;
		PreparedStatement preparedStatement = null;
		String sql = "update teacher set name = ?,age = ?,bornDate = ?,email = ?,address = ? where tid = ?;";

		connection = DBUtils.getConnection();

		try {
			preparedStatement = connection.prepareStatement(sql);
			// 绑定参数,赋值
			preparedStatement.setString(1, teacher.getName());
			preparedStatement.setInt(2, teacher.getAge());
			//将java.util.Date类型日期时间转换为java.sql.Date类型,然后插入到数据库中
			preparedStatement.setDate(3, DateUtils.utilDateToSqlDate(teacher.getBornDate()));
			preparedStatement.setString(4, teacher.getEmail());
			preparedStatement.setString(5, teacher.getAddress());
			preparedStatement.setInt(6, teacher.getTid());
			// 执行SQL语句,返回受影响的行数值
			int result = preparedStatement.executeUpdate();
			// 将结果返回给调用者
			return result;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.closeAll(connection, preparedStatement, null);
		}
		return 0;
	}

	// 查询单个:根据教师tid查询一条数据,查询成功返回一个结果集(ResultSet类型),从结果集中取出元素,封装成一个Teacher对象,将该对象返回
	public Teacher select(int tid) {

		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		Teacher teacher = null;
		String sql = "select * from teacher where tid = ?;";

		connection = DBUtils.getConnection();

		try {
			preparedStatement = connection.prepareStatement(sql);
			// 绑定参数,赋值
			preparedStatement.setInt(1, tid);
			resultSet = preparedStatement.executeQuery();
			// 处理结果集,因为是查询单个数据,所以不需要循环遍历获取数据,集合中有数据就取出来
			if (resultSet.next()) {
				teacher = new Teacher();
				int teacherid = resultSet.getInt("tid");
				String name = resultSet.getString("name");
				int age = resultSet.getInt("age");
				Date bornDate = resultSet.getDate("bornDate");
				String email = resultSet.getString("email");
				String address = resultSet.getString("address");
				// 将获取的赋值给teacher对象
				teacher.setTid(teacherid);
				teacher.setName(name);
				teacher.setAge(age);
				teacher.setBornDate(bornDate);
				teacher.setEmail(email);
				teacher.setAddress(address);
			}
			return teacher;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.closeAll(connection, preparedStatement, null);
		}
		return null;
	}

	// 查询所有:将teacher表中的所有数据全部查询出来,查询成功返回一个结果集(ResultSet类型),从结果集中取出元素,封装成多个Teacher对象,将多个对象存储在集合中,返回这个集合
	public List selectAll() {

		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		Teacher teacher = null;
		List teacherList = new ArrayList();
		String sql = "select * from teacher;";

		connection = DBUtils.getConnection();

		try {
			preparedStatement = connection.prepareStatement(sql);
			resultSet = preparedStatement.executeQuery();
			// 查询出来多个结果,存在resultSet结果集中,遍历该结果集
			while (resultSet.next()) {
				int teacherid = resultSet.getInt("tid");
				String name = resultSet.getString("name");
				int age = resultSet.getInt("age");
				Date bornDate = resultSet.getDate("bornDate");
				String email = resultSet.getString("email");
				String address = resultSet.getString("address");
				teacher = new Teacher(teacherid, name, age, bornDate, email,
						address);
				teacherList.add(teacher);
			}
			return teacherList;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.closeAll(connection, preparedStatement, null);
		}
		return null;
	}
}

4 测试

4.1 测试增加数据

package com.cxyzxc.examples04;

public class TestTeacherInsert {

	public static void main(String[] args) {
		// 创建TteacherDaoImpl类对象
		TeacherDaoImpl teacherDaoImpl = new TeacherDaoImpl();
		//创建字符串类型的日期
		String strDate = "1992-03-22";
		
		// 创建Teacher类对象
		//DateUtils.strDateToUtilDate(strDate):将字符串类型的日期时间转换为java.util.Date类型
		Teacher teacher = new Teacher("王五", 32, DateUtils.strDateToUtilDate(strDate), "[email protected]","安徽合肥蜀山区淠河路200号");
		// 将teacher对象插入到数据库teacher表中
		int result = teacherDaoImpl.insert(teacher);
		if (result == 1) {
			System.out.println("数据插入成功");
		} else {
			System.out.println("数据插入失败");
		}
	}
}

4.2 测试删除数据

【JDBC】----Date工具类和DAO数据访问对象_第4张图片

4.3 测试修改数据

【JDBC】----Date工具类和DAO数据访问对象_第5张图片 

4.4 测试查询单个

【JDBC】----Date工具类和DAO数据访问对象_第6张图片 

4.5 测试查询所有

【JDBC】----Date工具类和DAO数据访问对象_第7张图片 

今天的分享就到此结束了

创作不易点赞评论互关三连

 

 

 

你可能感兴趣的:(Java开发者成长之路,数据库,java,开发语言)