数据库要求:
列名 | 类型 | 说明 | 列名 |
---|---|---|---|
user_id | 整数、主键 | 用户编号 | user_id |
user_name | 字符串,唯一,非空 | 用户名称 | user_name |
user_pwd | 字符串,非空 | 用户密码 | user_pwd |
user_borndate | DATE | 出生日期 | user_borndate |
user_email | 字符串,非空 | 邮箱 | user_email |
user_address | 字符串 | 地址 | user_address |
项目要求:
采用DAO+Entity分层完成五个功能:增、删、改、查、查所有用户信息
并作出测试!
注意: sql.Date和java.util.Date之间的转换,要求写成工具类!
知识科普:
DAO(Data Access Object) 是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
实体类(entity) 是一行数据中,多个零散的数据进行整理,通过entity的规则对表中的数据进行对象的封装,表名=类名;列名=属性名;提供各个属性的get、set方法,提供无参构造方法、(视情况添加有参构造)
数据库SQL命令:
create table users
(
user_id int primary key ,
user_name varchar(20) unique not null ,
user_pwd varchar(20) not null ,
user_borndate date ,
user_email varchar(20) not null ,
user_address varchar(50)
) character set utf8;
properties文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/account?useUnicode=true&characterEncoding=utf8
username=root
password=123456
数据库连接工具类:
import java.sql.*;
/**
* 数据库工具类
* 1.提供连接--Connection
* 2.提供统一资源关闭
* 可复用性方案
*/
public class DBUtils {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 硬编码
* 获取连接对象
*/
public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/temp?useUnicode=true&characterEncoding=utf8", "root", "123456");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
/**
* 释放资源
*/
public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
日期转换工具类
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* 日期转换
*
* 字符串转换为UtilDate
* 字符串转换为SqlDate
* UtilDate转换为SqlDate
* 注意:SqlDate转换为UtilDate是不可以的,因为UtilDate是SqlDate的父类
*/
public class DateUtils {
private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
/**
* 字符串转换为UtilDate
*/
public static java.util.Date strToUtilDate(String string) {
try {
return SIMPLE_DATE_FORMAT.parse(string);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 字符串转换为SqlDate
*/
public static java.sql.Date strToSqlDate(String string) {
try {
java.util.Date date = SIMPLE_DATE_FORMAT.parse(string);
return new java.sql.Date(date.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* UtilDate转换为SqlDate
*/
public static java.sql.Date utilToSqlDate(java.util.Date date) {
return new java.sql.Date(date.getTime());
}
}
Entity层用户类
import java.util.Date;
/**
* Entity层
* 用户类
*/
public class Users {
private String user_id;
private String user_name;
private String user_pwd;
private Date user_borndate;
private String user_email;
private String user_address;
public Users() {
}
public Users(String user_id, String user_name, String user_pwd, Date user_borndate, String user_email, String user_address) {
this.user_id = user_id;
this.user_name = user_name;
this.user_pwd = user_pwd;
this.user_borndate = user_borndate;
this.user_email = user_email;
this.user_address = user_address;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_pwd() {
return user_pwd;
}
public void setUser_pwd(String user_pwd) {
this.user_pwd = user_pwd;
}
public Date getUser_borndate() {
return user_borndate;
}
public void setUser_borndate(Date user_borndate) {
this.user_borndate = user_borndate;
}
public String getUser_email() {
return user_email;
}
public void setUser_email(String user_email) {
this.user_email = user_email;
}
public String getUser_address() {
return user_address;
}
public void setUser_address(String user_address) {
this.user_address = user_address;
}
@Override
public String toString() {
return "Users{" +
"user_id='" + user_id + '\'' +
", user_name='" + user_name + '\'' +
", user_pwd='" + user_pwd + '\'' +
", user_borndate=" + user_borndate +
", user_email='" + user_email + '\'' +
", user_address='" + user_address + '\'' +
'}';
}
}
DAO层数据库操作类
import www.mylifes1110.jdbc.DBUtils;
import www.mylifes1110.jdbc.DateUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* DAO层
* 对数据库中User表的一系列操作
* 只做对数据库做访问的操作!
*/
public class UsersDaoImpl {
private Connection connection = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
/**
* 增
*/
public int insert(Users users) {
connection = DBUtils.getConnection();
String sql = "insert into users (user_id, user_name, user_pwd, user_borndate, user_email, user_address) values (?, ?, ?, ?, ?, ?)";
try {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, users.getUser_id());
preparedStatement.setString(2, users.getUser_name());
preparedStatement.setString(3, users.getUser_pwd());
/**
* Java应用层是java.util.Date 数据库是Java.sql.Date
* users.getBornDate()-->utilDate JDBC需要的是sqlDate
*/
preparedStatement.setDate(4, DateUtils.utilToSqlDate(users.getUser_borndate()));
preparedStatement.setString(5, users.getUser_email());
preparedStatement.setString(6, users.getUser_address());
int result = preparedStatement.executeUpdate();
return result;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, resultSet);
}
return 0;
}
/**
* 删
*/
public int delete(String user_id) {
connection = DBUtils.getConnection();
String sql = "delete from users where user_id = ?";
try {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, user_id);
return preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, resultSet);
}
return 0;
}
/**
* 改
*/
public int update(Users users) {
connection = DBUtils.getConnection();
String sql = "update users set user_name = ?, user_pwd = ?, user_borndate = ?, user_email = ?, user_address = ? where user_id = ?";
try {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, users.getUser_name());
preparedStatement.setString(2, users.getUser_pwd());
preparedStatement.setDate(3, DateUtils.utilToSqlDate(users.getUser_borndate()));
preparedStatement.setString(4, users.getUser_email());
preparedStatement.setString(5, users.getUser_address());
preparedStatement.setString(6, users.getUser_id());
return preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, resultSet);
}
return 0;
}
/**
* 查询一条
*/
public Users select(String user_id) {
connection = DBUtils.getConnection();
String sql = "select user_id, user_name, user_pwd, user_borndate, user_email, user_address from users where user_id = ?";
try {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, user_id);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String user_id1 = resultSet.getString("user_id");
String user_name = resultSet.getString("user_name");
String user_pwd = resultSet.getString("user_pwd");
Date user_borndate = resultSet.getDate("user_borndate");
String user_email = resultSet.getString("user_email");
String user_address = resultSet.getString("user_address");
Users users = new Users(user_id1, user_name, user_pwd, user_borndate, user_email, user_address);
return users;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, resultSet);
}
return null;
}
/**
* 查询所有信息
*/
public List<Users> selectAll() {
connection = DBUtils.getConnection();
String sql = "select user_id, user_name, user_pwd, user_borndate, user_email, user_address from users";
List<Users> usersList = new ArrayList<>();
try {
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String user_id = resultSet.getString("user_id");
String user_name = resultSet.getString("user_name");
String user_pwd = resultSet.getString("user_pwd");
Date user_borndate = resultSet.getDate("user_borndate");
String user_email = resultSet.getString("user_email");
String user_address = resultSet.getString("user_address");
Users users = new Users(user_id, user_name, user_pwd, user_borndate, user_email, user_address);
usersList.add(users);
}
return usersList;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, resultSet);
}
return null;
}
}
测试类
import www.mylifes1110.jdbc.DateUtils;
import java.util.List;
/**
* 测试类
* 注意:我在测试的时候是测试成功一个注释一个,否则会有影响!
*/
public class TestDemo {
public static void main(String[] args) {
UsersDaoImpl usersDao = new UsersDaoImpl();
/**
* 增
* 注意:userDao.insert(users1)的结果是int类型,可以判断是否添加成功的
* 因为我这里只是测试,添加了三个新信息,所有我就写了一个提示
*/
Users users1 = new Users("1", "ziph", "123456", DateUtils.strToUtilDate("1998-08-08"), "[email protected]", "河北省");
Users users2 = new Users("2", "Marry", "123456", DateUtils.strToUtilDate("2000-09-18"), "[email protected]", "北京市");
Users users3 = new Users("3", "Join", "123456", DateUtils.strToUtilDate("2002-10-28"), "[email protected]", "天津市");
usersDao.insert(users1);
usersDao.insert(users2);
int result = usersDao.insert(users3);
if (result > 0) {
System.out.println("添加成功!");
} else {
System.out.println("添加失败!");
}
/**
* 删
*/
int result = usersDao.delete("3");
if (result > 0) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
/**
* 改
*/
Users users = new Users("2", "Marry", "666666", DateUtils.strToUtilDate("1999-01-23"), "[email protected]", "杭州");
int result = usersDao.update(users);
if (result > 0) {
System.out.println("修改成功!");
} else {
System.out.println("修改失败!");
}
/**
* 查询一条信息
*/
Users users = usersDao.select("1");
System.out.println(users);
/**
* 查询所有信息
*/
List<Users> usersList = usersDao.selectAll();
usersList.forEach(System.out::println);
}
}
添加成功!
删除成功!
修改成功!
查询一条信息成功!
查询所有信息成功!