初识JDBC的增删改
在连接数据库的基础上,对数据库中数据进行增、删、改。
在main包中的Java包下新建两个包:Dao包和Model包,在Dao包中新建UserDao接口类和Impl包UserDaoImpl接口实现类;在Model包中新建User实体类。在test包下的Java包中新建UserTest测试类。
实体类User
package com.jiazhong.model;import java.util.Date;/*** 该类和数据库中的tbl_user表对应*/
public class User {/*** 属性*/private Long user_id;private String user_name;private String user_password;private String user_email;private Date user_birthday;private String user_hobbys;private Integer user_sex;private String user_address;private Integer user_status;private Date create_time;private Date update_time;private Integer is_deleted;public Long getUser_id() {return user_id;}public void setUser_id(Long 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_password() {return user_password;}public void setUser_password(String user_password) {this.user_password = user_password;}public String getUser_email() {return user_email;}public void setUser_email(String user_email) {this.user_email = user_email;}public Date getUser_birthday() {return user_birthday;}public void setUser_birthday(Date user_birthday) {this.user_birthday = user_birthday;}public String getUser_hobbys() {return user_hobbys;}public void setUser_hobbys(String user_hobbys) {this.user_hobbys = user_hobbys;}public Integer getUser_sex() {return user_sex;}public void setUser_sex(Integer user_sex) {this.user_sex = user_sex;}public String getUser_address() {return user_address;}public void setUser_address(String user_address) {this.user_address = user_address;}public Integer getUser_status() {return user_status;}public void setUser_status(Integer user_status) {this.user_status = user_status;}public Date getCreate_time() {return create_time;}public void setCreate_time(Date create_time) {this.create_time = create_time;}public Date getUpdate_time() {return update_time;}public void setUpdate_time(Date update_time) {this.update_time = update_time;}public Integer getIs_deleted() {return is_deleted;}public void setIs_deleted(Integer is_deleted) {this.is_deleted = is_deleted;}@Overridepublic String toString() {return "User{" +"user_id=" + user_id +", user_name='" + user_name + '\'' +", user_password='" + user_password + '\'' +", user_email='" + user_email + '\'' +", user_birthday=" + user_birthday +", user_hobbys='" + user_hobbys + '\'' +", user_sex=" + user_sex +", user_address='" + user_address + '\'' +", user_status=" + user_status +", create_time=" + create_time +", update_time=" + update_time +", is_deleted=" + is_deleted +'}';}
}
接口类UserDao
package com.jiazhong.dao;import com.jiazhong.model.User;import java.sql.SQLException;/*** 针对tbl_user表的操作接口*/
public interface UserDao {public void add(User user) throws SQLException, ClassNotFoundException;/*** 修改表中的数据* @param user*/public void update(User user) throws ClassNotFoundException, SQLException;/*** 修改密码* @param userName 用户姓名* @param oldPassword 旧密码* @param newPassword 新密码*/public void updatePassword(String userName,String oldPassword,String newPassword) throws SQLException, ClassNotFoundException;/*** 根据用户编号删除用户信息* @param userId 用户Id*/public void delete(long userId) throws ClassNotFoundException, SQLException;
}
接口实现类UserDaoImpl
(注意这条代码需要结合上一篇文章稍做调整,因为每个人MySQL的用户名和密码以及要操作的MySQL数据都不一样)
package com.jiazhong.dao.Impl;import com.jiazhong.dao.UserDao;
import com.jiazhong.model.User;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;/*** UserDao接口的实现类*/
public class UserDaoImpl implements UserDao {@Overridepublic void add(User user) throws SQLException, ClassNotFoundException {//1.连接数据库Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myshopping","root","root");//注意:这里的东西需要结合上一条文章进行修改为自己MySQL的东西//2.创建SQL语句String sql = "insert into tbl_user values(default,?,?,?,?,?,?,?,default,now(),now(),default)";//3.创建预处理对象PreparedStatement ps = conn.prepareStatement(sql);//3.1 设置SQL语句中?号占位符的值ps.setString(1,user.getUser_name());ps.setString(2,user.getUser_password());ps.setString(3,user.getUser_email());//将Date类型的数据格式化为字符串String birthday = new SimpleDateFormat("yyyy-MM-dd").format(user.getUser_birthday());ps.setString(4,birthday);ps.setString(5,user.getUser_hobbys());ps.setInt(6,user.getUser_sex());ps.setString(7,user.getUser_address());//4.发送并执行SQL语句ps.executeUpdate();ps.close();conn.close();}@Overridepublic void update(User user) throws ClassNotFoundException, SQLException {//1.连接数据库Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myshopping","root","root");//创建SQL语句//String sql = "update tbl_user set user_password='jiazhong001' where user_id=1911354025664577538";String sql = "update tbl_user set user_password=? where user_id=?";//创建预处理对象PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, user.getUser_password());ps.setLong(2,user.getUser_id());//发送并执行SQL语句,返回数据库中表的受影响行数//executeUpdate方法用于执行增、删、改SQL语句int num = ps.executeUpdate();if(num>0){System.out.println("修改数据成功...");}else{System.out.println("修改数据失败...");}//释放资源ps.close();conn.close();}@Overridepublic void updatePassword(String userName, String oldPassword, String newPassword) throws ClassNotFoundException, SQLException {//1.连接数据库Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myshopping","root","root");//创建SQL语句String sql = "update tbl_user set user_password=? where user_name=? and user_password=?";//创建预处理对象PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1,newPassword);ps.setString(2,userName);ps.setString(3,oldPassword);//发送并执行SQL语句,返回数据库中表的受影响行数//executeUpdate方法用于执行增、删、改SQL语句int num = ps.executeUpdate();if(num>0){System.out.println("修改数据成功...");}else{System.out.println("修改数据失败...");}//释放资源ps.close();conn.close();}@Overridepublic void delete(long userId) throws ClassNotFoundException, SQLException {//1.连接数据库Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myshopping","root","root");//创建SQL语句String sql = "delete from tbl_user where user_id=?";//创建预处理对象PreparedStatement ps = conn.prepareStatement(sql);ps.setLong(1,userId);//发送并执行SQL语句,返回数据库中表的受影响行数//executeUpdate方法用于执行增、删、改SQL语句int num = ps.executeUpdate();if(num>0){System.out.println("删除数据成功...");}else{System.out.println("删除数据失败...");}//释放资源ps.close();conn.close();}}
测试类UserTest
package com.jiazhong;import com.jiazhong.dao.Impl.UserDaoImpl;
import com.jiazhong.dao.UserDao;
import com.jiazhong.model.User;
import org.junit.Test;import java.sql.SQLException;
import java.util.Date;public class UserTest {private UserDao userDao = new UserDaoImpl();@Testpublic void add(){try {User user = new User();user.setUser_address("陕西省西安市");user.setUser_birthday(new Date());user.setUser_email("jiazhong@qq.com");user.setUser_hobbys("跑步");user.setUser_password("1234567");user.setUser_sex(0);user.setUser_name("jiazhong0001");userDao.add(user);System.out.println("添加成功");} catch (Exception e) {e.printStackTrace();System.out.printf("添加失败");}}@Testpublic void update(){try {User user = new User();user.setUser_password("jiazhong002");user.setUser_id(Long.valueOf("1911354025664577539L"));userDao.update(user);System.out.printf("修改成功");} catch (Exception e) {e.printStackTrace();System.out.printf("修改失败");}}@Testpublic void delete(){try {
// User user = new User();
// user.setUser_id(1911354025664577539L);
// userDao.delete(user.getUser_id());
// 删除操作在接口中定义的是一个参数,所以可以直接传参,不用再在这里new一个类UserLong userId = 1911354025664577539L;userDao.delete(userId);System.out.printf("删除成功");} catch (Exception e) {e.printStackTrace();System.out.printf("删除失败");}}@Testpublic void updatePassword(){try {userDao.updatePassword("大美","meimei","meimeimeimei");System.out.printf("密码修改成功");} catch (Exception e) {e.printStackTrace();System.out.printf("密码修改失败");}}
}