前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java数据库增删改查CRUD(封装思想),伴随程序员一生的封装思想

java数据库增删改查CRUD(封装思想),伴随程序员一生的封装思想

作者头像
软件小生活
发布2021-08-13 13:15:58
6610
发布2021-08-13 13:15:58
举报
文章被收录于专栏:软件小生活

项目结构如下:lib是放第三方库的文件夹

jdbc连接数据的步骤:

1、

导入第三方jar包;

2、

右键编译jar包;

3、

注册驱动类;

4、

建立连接;

5、

写SQL语句;

6、

创建Statement对象;

7、

执行SQL语句,得到ResultSet结果集;

8、

关闭IO流,close();

以上的步骤缺一不可,并且除了第5、第6的顺序可以颠倒之外,其他的顺序不可颠倒,必须严格要求按照步骤执行,缺任一步骤都会导致连接不成功数据库。

直接进如主题,进行数据库的增删改查操作,(注意这里的数据是写死的,固定值来测试,如果有需要的伙伴可以自行优化,相信对你来说不是难事,so easy);

数据库表如下所示:

代码语言:javascript
复制
User.java
package demo01;

public class User {
  private int id;
  private String username;
  private String password;
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
  }
  
  

}
代码语言:javascript
复制
 Utils .java
 package demo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Utils {
  public static String url = "jdbc:mysql://localhost:3306/db1";
  public static String user = "root";
  public static String password = "root";
  
  //一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。
  //比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
  static {  
    try {
      Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
  
  
  public static Connection getConnection() {
    Connection con=null;
    
    try {
      con = DriverManager.getConnection(Utils.url, Utils.user, Utils.password);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return con;
    
  }
  
  public static Statement getStatement(Connection con) throws Exception {
    
    Statement statement=null;
    if(con!=null) {
    
       statement = con.createStatement();
    }
    return statement;
    
  }
  
  
  public void close(ResultSet ret, Statement st,Connection con) throws Exception {
    if (ret != null) {
      ret.close();
    }
    if (st != null) {
      st.close();
    }
    if (con != null) {

      con.close();
    }
  }
  
  public static ResultSet getResultSet(String sql) throws Exception {
  
    Connection con = Utils.getConnection();
    Statement ste=Utils.getStatement(con);
    ResultSet resultSet = ste.executeQuery(sql);
    return resultSet;
    
  }
  
  
  //影响行数
  public static int addLineOrdeleteLineOrModifyLine(String sql) throws Exception {
    Connection con = Utils.getConnection();
    Statement ste=Utils.getStatement(con);
    int update = ste.executeUpdate(sql);
    //return ste.executeUpdate(sql);
    return update;
    
  }

}
代码语言:javascript
复制
UserUtils.java

package demo01;

import java.util.List;

public interface UserUtils {
  //查询所有用户信息
  public abstract List<User> queryUserList()  throws Exception;

  //根据用户名和密码来查询用户信息
  public abstract User queryUsernameAndPassword(String username,String password) throws Exception;

  //根据id查询用户
  public abstract User queryUserId(int id) throws Exception;

  //模拟用户登录,可以返回boolean类型,也可以返回User对象,最好是使用User对象
  public abstract User Login(String username,String password) throws Exception;
  
  //单条删除
  public abstract int deleteId(int id) throws Exception;
  
  //批量删除,思路是循环删除单条记录,就可以达到批量删除
  public abstract int deleteIds(int []arrs) throws Exception;
  
  public abstract int Modify(User user) throws Exception;
  //这种是最古老的最土的方式,要是属性很多呢,就不推荐使用,推荐使用面向对象的(封装思想思想)
  //public abstract int Modify(String username,String password) throws Exception;
  
  public abstract int add(User user) throws Exception;
  //public abstract int add(String username,String password) throws Exception;
}
}
代码语言:javascript
复制
UserUtilsImpl.java

package demo01;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class UserUtilsImpl implements UserUtils{

  @Override
  public List<User> queryUserList() throws Exception {
//    Connection con=Utils.getConnection();
//    Statement sta=Utils.getStatement(con);
    
    String sql="select * from login";
    ResultSet resultSet = Utils.getResultSet(sql);
    List<User> list=new ArrayList<User>();  
    while(resultSet.next()) {
      User user=new User();
      user.setId(resultSet.getInt("id"));
      user.setUsername(resultSet.getString("username"));
      user.setPassword(resultSet.getString("password"));
      list.add(user);  
    }
    return list;
  }

  @Override
  public User queryUsernameAndPassword(String username,String password) throws Exception {
    Connection con=Utils.getConnection();
    Statement sta=Utils.getStatement(con);
  
    String sql="select * from login where username='"+username+"' and password='"+password+"'";
    ResultSet resultSet = sta.executeQuery(sql);
    User user=new User();
    while(resultSet.next()) {
      user.setId(resultSet.getInt("id"));
      user.setUsername(resultSet.getString("username"));
      user.setPassword(resultSet.getString("password"));
    }
    return user;
  }

  @Override
  public User queryUserId(int id) throws Exception {

    Connection con=Utils.getConnection();
    Statement sta=Utils.getStatement(con);
    String sql="select * from login where id="+id+"";
    ResultSet resultSet = sta.executeQuery(sql);
    User user=new User();
    while(resultSet.next()) {
      
      user.setId(resultSet.getInt("id"));
      user.setUsername(resultSet.getString("username"));
      user.setPassword(resultSet.getString("password"));
    }
    return user;
  }

  @Override
  public User Login(String username, String password) throws Exception {
    Connection con=Utils.getConnection();
    Statement sta=Utils.getStatement(con);
    //拼接字符串用       "+变量名+"
    String sql="select * from login where username='"+username+"' and password='"+password+"'";
    ResultSet resultSet = sta.executeQuery(sql);
    User user=new User();
    while(resultSet.next()) {
      user.setId(resultSet.getInt("id"));
      user.setUsername(resultSet.getString("username"));
      user.setPassword(resultSet.getString("password"));
    }
    return user;
  }

  @Override
  public int deleteId(int id) throws Exception {
    String sql="delete from login where id='"+id+"'";
    //return Utils.addLineOrdeleteLineOrModifyLine(sql);
    int i = Utils.addLineOrdeleteLineOrModifyLine(sql);
    return i;
    
  }

  @Override
  public int deleteIds(int[] arrs) throws Exception {    
    //批量删除的思路就是 循环删除单条记录,(使用数组或集合都可以的)
    int i=0;
    for (int d : arrs) {
        UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
        userUtilsImpl.deleteId(d);
        i++; 
    }
    return i;    
  }

//  @Override
//  public int Modify(User user) throws Exception {
//    String sql="update login set username=user.getUsername and password=user.getPassword where id=12";
//      UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
//      int i = Utils.addLineOrdeleteLineOrModifyLine(sql);
//
//    return i;
//  }
  
//  @Override
//  public int Modify(String username,String password) throws Exception {
//    String sql="update login set username='"+username+"',password='"+password+"' where id=12;";
//      //UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
//      int i = Utils.addLineOrdeleteLineOrModifyLine(sql);
//
//    return i;
//  }
  
  @Override
  public int Modify(User user) throws Exception {
    String sql="update login set username='"+user.getUsername()+"',password='"+user.getPassword()+"' where id=12;";
      //UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
      int i = Utils.addLineOrdeleteLineOrModifyLine(sql);

    return i;
  }

  @Override
  public int add(User user) throws Exception {
        String sql="insert into login(username,password) values('"+user.getUsername()+"','"+user.getPassword()+"')";
        int line = Utils.addLineOrdeleteLineOrModifyLine(sql);
        
    return line;
  }
  
//  @Override
//  public int add(String username,String password) throws Exception {
//        String sql="insert into login(username,password) values('"+username+"','"+password+"')";
//        int line = Utils.addLineOrdeleteLineOrModifyLine(sql);    
//    return line;
//  }
  
}
代码语言:javascript
复制
demoTest01.java

package demo01;

import java.util.Date;
import java.util.List;

import org.junit.Test;

public class demoTest01 {
  
  public static void main(String[] args) throws Exception {
    demoTest01 test=new demoTest01();
//    test.fun0();
//    test.fun1();
//    test.fun2();
//    test.fun3();
//    test.fun5();
//    test.fun6();
    test.fun7();
  }

  public void fun0() throws Exception {
//    根据封装好的方法来查询所有用户信息。selet * from login;当然也可以是写成是单元测试的方式,当然直接写成
//    在main主方法内,也是可以的,反正都是为了好测试。主要是为了测试封装思想。
    UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
    List<User> userList = userUtilsImpl.queryUserList();
    // System.out.println(userList);
    for (User user : userList) {
      System.out.println(user);
    }
  }
  
  @Test
  // 根据用户名和密码查询用户信息         单元测试(加上单元测试是为了更好的测试,方便快捷)
  public void fun1() throws Exception {
    UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
    User user = userUtilsImpl.queryUsernameAndPassword("123", "123");
    // 这里传入的参数值是固定值,写死的,这里可以灵活传入用户输入的内容
    System.out.println(user);

  }

  @Test
  //根据id查询用户信息
  public void fun2() throws Exception {
    UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
    User user = userUtilsImpl.queryUserId(2);
    System.out.println(user);  
  }
  
  @Test
  // 登录单元测试
  public void fun3() throws Exception {
    UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
    User user = userUtilsImpl.Login("121", "123");
    if (user != null) {
      if (user.getUsername() != null && user.getPassword() != null) {
        Date date = new Date();
        String localTime = date.toLocaleString();
        // System.currentTimeMillis();
        System.out.println("欢迎你" + user.getUsername() + "用户登录本最帅系统  " + "登录时间是:" + localTime);
      } else {
        System.out.println("登录失败");
      }
    }
  }

  @Test
  //根据id删除用户信息,
  public void fun4() throws Exception {
    UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
    int i = userUtilsImpl.deleteId(2);
    if(i>0) {
      System.out.println("删除成功"+i);
    }
    else {
      System.out.println("删除失败");
    }
    
  }
  
  @Test
  //批量删除  循环删除单条记录,就是批量删除。   单元测试不能用static修饰
  public void fun5() throws Exception{  
    UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
    int arr[]= {1,2,3,4};
    int i = userUtilsImpl.deleteIds(arr);
    if(i>0) {
      System.out.println("批量删除"+i+"条");
    }    
  }
  
  // 添加记录
  @Test
  public void fun6() throws Exception{
    UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
    User user=new User();
    user.setUsername("123");
    user.setPassword("1231");
    int i = userUtilsImpl.add(user);
    if(i>0) {
         System.out.println("添加成功"+i);
        }
   else {
     System.out.println("添加失败");
   }  
}
  
  // 添加记录
  //@Test
  //属性比较少的时候可以用这种方法,但还是比较推荐使用面向对象的思想来完成,封装好,简洁方便维护
//  public void fun6() throws Exception{
//    UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
//    
//    int i = userUtilsImpl.add("123","123");
//    if(i>0) {
//         System.out.println("添加成功"+i);
//        }
//   else {
//     System.out.println("添加失败");
//   }  
//}
//  
  

//  @Test
//  public void fun7() throws Exception{
//  UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
//  User user=new User();
//  user.setId(12);
//  user.setUsername("123");
//  user.setPassword("张三");
//  int i = userUtilsImpl.Modify(user);
//   if(i>0) {
//         System.out.println("修改成功"+i);
//        }
//   else {
//     System.out.println("修改失败");
//   }  
//}

  
  //修改数据库中的数据
  @Test
  public void fun7() throws Exception {
    UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
    User user = new User();
    user.setUsername("王五");
    user.setPassword("王五");
    int i = userUtilsImpl.Modify(user);
    if (i > 0) {
      System.out.println("修改成功" + i);
    } else {
      System.out.println("修改失败");
    }
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档