@Override
  public List<Comment> listComment(Pagination page) {
    String sql =
        "SELECT CM.*, V.videoname, U.username, U.userimageurl "
            + "FROM TBLCOMMENT CM "
            + "INNER JOIN TBLVIDEO V ON CM.videoid=V.videoid "
            + "INNER JOIN TBLUSER U ON CM.userid=U.userid "
            + "ORDER BY commentdate DESC OFFSET ? LIMIT ?";

    List<Comment> list = new ArrayList<Comment>();
    Comment comment = null;
    try (Connection cnn = dataSource.getConnection();
        PreparedStatement ps = cnn.prepareStatement(sql); ) {
      ps.setInt(1, page.offset());
      ps.setInt(2, page.getItem());
      ResultSet rs = ps.executeQuery();
      while (rs.next()) {
        comment = new Comment();
        comment.setCommentId(Encryption.encode(rs.getString("commentid")));
        comment.setCommentDate(rs.getDate("commentdate"));
        comment.setCommentText(rs.getString("commenttext"));
        comment.setVideoId(Encryption.encode(rs.getString("videoid")));
        comment.setUserId(Encryption.encode(rs.getString("userid")));
        comment.setVideoName(rs.getString("videoname"));
        comment.setUsername(rs.getString("username"));
        comment.setUserImageUrl(rs.getString("userimageurl"));
        comment.setReplyId(Encryption.encode(rs.getString("replycomid")));
        list.add(comment);
      }
      return list;
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return null;
  }
  @Override
  public Comment getComment(String commentId) {
    String sql =
        "SELECT CM.*, V.videoname, U.username, U.userimageurl "
            + "FROM TBLCOMMENT CM "
            + "INNER JOIN TBLVIDEO V ON CM.videoid=V.videoid "
            + "INNER JOIN TBLUSER U ON CM.userid=U.userid "
            + "WHERE CM.commentid=?";

    Comment comment = null;
    try (Connection cnn = dataSource.getConnection();
        PreparedStatement ps = cnn.prepareStatement(sql); ) {
      ps.setInt(1, Integer.parseInt(Encryption.decode(commentId)));
      ResultSet rs = ps.executeQuery();
      while (rs.next()) {
        comment = new Comment();
        comment.setCommentId(Encryption.encode(rs.getString("commentid")));
        comment.setCommentDate(rs.getDate("commentdate"));
        comment.setCommentText(rs.getString("commenttext"));
        comment.setVideoId(Encryption.encode(rs.getString("videoid")));
        comment.setUserId(Encryption.encode(rs.getString("userid")));
        comment.setVideoName(rs.getString("videoname"));
        comment.setUsername(rs.getString("username"));
        comment.setUserImageUrl(rs.getString("userimageurl"));
        comment.setReplyId(Encryption.encode(rs.getString("replycomid")));
      }
      return comment;
    } catch (SQLException e) {
      e.printStackTrace();
    } catch (NumberFormatException e1) {
      System.out.println("Error");
      return null;
    }
    return null;
  }
 @Override
 public boolean insert(Comment comment) {
   String sql = "INSERT INTO TBLCOMMENT VALUES(nextval('seq_comment'), NOW(), ?, ?, ?,0)";
   try (Connection cnn = dataSource.getConnection();
       PreparedStatement ps = cnn.prepareStatement(sql); ) {
     ps.setString(1, comment.getCommentText());
     ps.setInt(2, Integer.parseInt(Encryption.decode(comment.getVideoId())));
     ps.setInt(3, Integer.parseInt(Encryption.decode(comment.getUserId())));
     if (ps.executeUpdate() > 0) {
       return true;
     }
   } catch (SQLException e) {
     e.printStackTrace();
   } catch (NumberFormatException e1) {
     System.out.println(e1.getMessage());
     return false;
   }
   return false;
 }
 @Override
 public int insertReturnId(Comment comment) {
   String sql = "INSERT INTO TBLCOMMENT VALUES(nextval('seq_comment'), NOW(), ?, ?, ?,0)";
   try (Connection cnn = dataSource.getConnection();
       PreparedStatement ps =
           cnn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS); ) {
     ps.setString(1, comment.getCommentText());
     ps.setInt(2, Integer.parseInt(Encryption.decode(comment.getVideoId())));
     ps.setInt(3, Integer.parseInt(Encryption.decode(comment.getUserId())));
     if (ps.executeUpdate() > 0) {
       ResultSet rs = ps.getGeneratedKeys();
       rs.next();
       return rs.getInt(1);
     }
   } catch (SQLException e) {
     e.printStackTrace();
   } catch (NumberFormatException e1) {
     System.out.println(e1.getMessage());
     return 0;
   }
   return 0;
 }
 @Override
 public boolean update(Comment comment) {
   String sql =
       "UPDATE TBLCOMMENT SET commenttext=?, videoid=?, userid=?, replycomid=? WHERE commentid=?";
   try (Connection cnn = dataSource.getConnection();
       PreparedStatement ps = cnn.prepareStatement(sql); ) {
     ps.setString(1, comment.getCommentText());
     ps.setInt(2, Integer.parseInt(Encryption.decode(comment.getVideoId())));
     ps.setInt(3, Integer.parseInt(Encryption.decode(comment.getUserId())));
     ps.setInt(4, Integer.parseInt(Encryption.decode(comment.getReplyId())));
     ps.setInt(5, Integer.parseInt(Encryption.decode(comment.getCommentId())));
     if (ps.executeUpdate() > 0) {
       return true;
     }
   } catch (SQLException e) {
     e.printStackTrace();
   } catch (NumberFormatException e1) {
     System.out.println(e1.getMessage());
     return false;
   }
   return false;
 }
  @Override
  public List<Comment> listReplyCommentOnVideo(String videoId) {
    String sql =
        "SELECT CM.*, V.videoname, U.username, U.userimageurl "
            + "FROM TBLCOMMENT CM "
            + "INNER JOIN TBLVIDEO V ON CM.videoid=V.videoid "
            + "INNER JOIN TBLUSER U ON CM.userid=U.userid "
            + "WHERE CM.videoid=? AND CM.replycomid is not null AND CM.replycomid <> 0 "
            + "ORDER BY commentdate DESC";

    List<Comment> list = new ArrayList<Comment>();
    Comment comment = null;
    try (Connection cnn = dataSource.getConnection();
        PreparedStatement ps = cnn.prepareStatement(sql); ) {
      ps.setInt(1, Integer.parseInt(Encryption.decode(videoId)));
      ResultSet rs = ps.executeQuery();
      while (rs.next()) {
        comment = new Comment();
        comment.setCommentId(Encryption.encode(rs.getString("commentid")));
        comment.setCommentDate(rs.getDate("commentdate"));
        comment.setCommentText(rs.getString("commenttext"));
        comment.setVideoId(Encryption.encode(rs.getString("videoid")));
        comment.setUserId(Encryption.encode(rs.getString("userid")));
        comment.setUsername(rs.getString("username"));
        comment.setUserImageUrl(rs.getString("userimageurl"));
        comment.setReplyId(Encryption.encode(rs.getString("replycomid")));
        list.add(comment);
      }
      return list;
    } catch (SQLException e) {
      e.printStackTrace();
    } catch (NumberFormatException e1) {
      System.out.println("ERROR covert");
      return null;
    }
    return null;
  }