//  测试查询
  public void list() {

    conn = DBConnUtils.getConnection();
    String sql = "select * from user";
    try {
      //  预编译 SQL 语句
      pstmt = conn.prepareStatement(sql);
      //  执行查询
      resultSet = pstmt.executeQuery();
      while (resultSet.next()) {

        System.out.println(
            "id = "
                + resultSet.getInt("id")
                + ", username = "******"username")
                + ", birth = "
                + resultSet.getDate("birth")
                + ", detail_time = "
                + resultSet.getObject("detail_time"));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally { // 关闭数据库连接释放资源
      try {
        if (null != pstmt) {
          pstmt.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
      try {
        if (null != pstmt) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
 //  新增数据
 @Test
 public void add() {
   conn = DBConnUtils.getConnection();
   String sql = " insert into user(id, username, birth) values(?, ?, ?)";
   try {
     //  预编译 SQL 语句
     pstmt = conn.prepareStatement(sql);
     pstmt.setInt(1, commId); // 为了方便测试直接指定了 id,实际使用中通常不需要指定 id,默认设置为自增类型即可
     pstmt.setString(2, "新增测试"); // 1表示 SQL 语句中的第一个问号
     pstmt.setDate(3, new Date(System.currentTimeMillis()));
     //  执行SQL
     int i = pstmt.executeUpdate();
     // 提交事务
     conn.commit();
     if (i > 0) System.out.println(" 新增成功...");
   } catch (SQLException e) {
     e.printStackTrace();
     // 出错回滚事务
     try {
       conn.rollback();
     } catch (SQLException e1) {
       e1.printStackTrace();
     }
   } finally { // 关闭数据库连接释放资源
     try {
       if (null != pstmt) {
         pstmt.close();
       }
     } catch (SQLException e) {
       e.printStackTrace();
     }
     try {
       if (null != pstmt) {
         conn.close();
       }
     } catch (SQLException e) {
       e.printStackTrace();
     }
   }
 }
  //  测试更新
  public void update() {
    conn = DBConnUtils.getConnection();
    String sql = " update user set username = ? where id = ?";
    try {
      //  预编译 SQL 语句
      pstmt = conn.prepareStatement(sql);
      pstmt.setString(1, "update_test"); //
      pstmt.setInt(2, commId); //
      //  执行更新
      int i = pstmt.executeUpdate();
      if (i > 0) System.out.println(" 更新成功...");

      // 记得要提交
      conn.commit();
    } catch (SQLException e) {
      e.printStackTrace();
      //  如果更新出错,执行回滚
      try {
        conn.rollback();
      } catch (SQLException e1) {
        e1.printStackTrace();
      }
    } finally { // 关闭数据库连接释放资源
      try {
        if (null != pstmt) {
          pstmt.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
      try {
        if (null != pstmt) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
  //  测试删除,删除的代码与更新的代码基本是一样的,
  //  只是 SQL 的不同而已,所以可以把更新和删除合并为一个方法,
  //  会在后续的文章实现合并
  public void del() {
    conn = DBConnUtils.getConnection();
    String sql = "  delete from user where id = ?";
    try {
      //  预编译 SQL 语句
      pstmt = conn.prepareStatement(sql);
      pstmt.setInt(1, commId); // 删除 id 为35的数据
      //  执行更新
      int i = pstmt.executeUpdate();
      if (i > 0) System.out.println(" 删除成功...");

      // 记得要提交
      conn.commit();
    } catch (SQLException e) {
      e.printStackTrace();
      //  如果更新出错,执行回滚
      try {
        conn.rollback();
      } catch (SQLException e1) {
        e1.printStackTrace();
      }
    } finally { // 关闭数据库连接释放资源
      try {
        if (null != pstmt) {
          pstmt.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
      try {
        if (null != pstmt) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }