分享第二十三篇励志语句
人生无常,最重要的不是你所处的位置,而是你所朝的方向。你不能决定生命的长度,但你可以控制它的宽度;你不能左右天气,但你可以改变心情;你不能改变容貌,但你可以展现笑容;你不能控制他人,但你可以掌握自己;你不能预知明天,但你可以利用今天;你不能样样顺利,但你可以事事尽力。
目录
分享第二十三篇励志语句
一: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 测试查询所有
今天的分享就到此结束了
创作不易点赞评论互关三连
(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类型。
(1)Java语言常规应用层面的日期时间类型,可以通过字符串创建对应的日期时间对象,但是已经过时。常用构造方法如下(很多构造方法已经过时):
(2)不能直接通过JDBC将java.util.Date类型数据插入到数据库中。
(1)不可以通过字符串创建对应的时间对象,只能通过毫秒值创建对象(1970年1月1日0点0分0秒至今的毫秒值),常用构造方法如下:
(2)可以直接通过JDBC将java.util.Date类型数据插入到数据库中。
(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();
}
}
}
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);
}
}
(1)DAO(Data Access Object) ,数据访问对象,是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
(2)之前代码中,业务逻辑代码和对数据库的访问操作代码全部写在一个类中,比较混乱,使用DAO实现业务逻辑与数据库访问相分离。
对同一张表的所有操作(增删改查,定义成方法)封装在XxxDaoImpl类中。Xxx表示实体类名
根据增删改查的不同功能实现具体的方法(insert、update、delete、select、selectAll)。
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号');
创建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;
}
}
编写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;
}
}
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("数据插入失败");
}
}
}