Java 如何根据用户输入(扫描程序)获取SQL准备语句

Java 如何根据用户输入(扫描程序)获取SQL准备语句,java,sql,jdbc,prepared-statement,java.util.scanner,Java,Sql,Jdbc,Prepared Statement,Java.util.scanner,我在创建准备好的语句时遇到困难,该语句选择并打印出符合条件的行: SELECT ReservationStartDate, ReservationEndDate FROM treservations WHERE ReservationStartDate< **?** AND ReservationEndDate> **?** 创建的对象是checkdatesforeservation方法的参数 SQL,其中两个参数“?”表示来自用户输入的日期 我需要while循环来查找所有行 最后

我在创建准备好的语句时遇到困难,该语句选择并打印出符合条件的行:

SELECT ReservationStartDate, ReservationEndDate FROM treservations WHERE ReservationStartDate< **?** AND ReservationEndDate> **?**
  • 创建的对象是
    checkdatesforeservation
    方法的参数
  • SQL,其中两个参数“?”表示来自用户输入的日期
  • 我需要while循环来查找所有行
  • 最后我需要返回一个列表
  • 公共静态列表checkdatesforeservation(预订){
    List reservationList=新建ArrayList();
    String sql2=“从ReservationStartDate=?和ReservationEndDate=?”中选择ReservationStartDate、ReservationEndDate;
    试一试{
    PreparedStatement ps=ConnectorDB.connection.prepareStatement(sql2);
    ResultSet ResultSet=ps.executeQuery();
    while(resultSet.next()){
    ps.setString(1,reservation.getReservationStartDate());
    ps.setString(2,reservation.getReservationEndDate());
    reservationList.add(预订);
    }
    }捕获(SQLE异常){
    e、 getStackTrace();
    }
    返回预订列表;
    }
    
    您需要在执行语句之前设置参数

            PreparedStatement ps = ConnectorDB.connection.prepareStatement(sql2);
            ps.setString(1,reservation.getReservationStartDate());
            ps.setString(2,reservation.getReservationEndDate());
            ResultSet resultSet = ps.executeQuery();
            while (resultSet.next()){
                reservationList.add(reservation);
            }
    
    请参阅

    公共静态列表checkdatesforeservation(预订){
    保留=空;
    List reservationList=新建ArrayList();
    String sql2=“从ReservationStartDate=?和ReservationEndDate=?”中选择ReservationStartDate、ReservationEndDate;
    试一试{
    PreparedStatement ps=ConnectorDB.connection.prepareStatement(sql2);
    ps.setString(1,reservation.getReservationStartDate());
    ps.setString(2,reservation.getReservationEndDate());
    ResultSet ResultSet=ps.executeQuery();
    while(resultSet.next()){
    保留=新保留();
    reservation.setReservationStartDate(rs.getString(“ReservationStartDate”);
    setReservationEndDate(rs.getString(“ReservationEndDate”);
    reservationList.add(预订);
    }
    }捕获(SQLE异常){
    e、 getStackTrace();
    }
    返回预订列表;
    }
    
    问题是什么?你有错误吗?谢谢。但由于某种原因,我得到的预订列表是空的。但现在我对这个解决方案很满意,需要仔细看看。
    public static List<Reservation> getAllReservation(){
            List<Reservation> reservationsList = new ArrayList<>();
            String sql = "SELECT * FROM `treservations`";
            try{
                PreparedStatement ps = ConnectorDB.connection.prepareStatement(sql);
                ResultSet resultSet = ps.executeQuery();
                while (resultSet.next()){
                    Reservation reservation = new Reservation();
                    reservation.setReservationID(resultSet.getInt("ReservationID"));
                    reservation.setCarID(resultSet.getInt("CarID"));
                    reservation.setReservationStartDate(resultSet.getString("ReservationStartDate"));
                    reservation.setReservationEndDate(resultSet.getString("ReservationEndDate"));
                    reservation.setPesel(resultSet.getString("Pesel"));
                    reservationsList.add(reservation);
                }
            }catch (SQLException e){
                e.printStackTrace();
            }
            return reservationsList;
        }
    
        public static Reservation clientReservationMenuInput(){
            Scanner scanner = new Scanner(System.in);
            String regData = "\\d{4}-\\d{2}-\\d{2}";
            System.out.println("2 Reservation start date (YYYY-MM-DD) ");
            String ReservationStartDate;
            while (!(ReservationStartDate=scanner.next()).matches(regData)){
                System.out.printf("Date format not correct, Please try once again\n");
            }
            System.out.println("3 Reservation end date (YYYY-MM-DD) ");
            String ReservationEndDate;
            while (!(ReservationEndDate=scanner.next()).matches(regData)){
                System.out.printf("Date format not correct, Please try once again\n");
            }
            Reservation reservation = new Reservation();
            reservation.setReservationStartDate(ReservationStartDate);
            reservation.setReservationEndDate(ReservationEndDate);
            return reservation;
        }
    
        public static List<Reservation> checkDatesForReservation(Reservation reservation){
            List<Reservation> reservationList = new ArrayList<>();
            String sql2= "SELECT ReservationStartDate, ReservationEndDate FROM treservations WHERE ReservationStartDate=? AND ReservationEndDate= ?";
            try{
                PreparedStatement ps = ConnectorDB.connection.prepareStatement(sql2);
                ResultSet resultSet = ps.executeQuery();
                while (resultSet.next()){
                    ps.setString(1,reservation.getReservationStartDate());
                    ps.setString(2,reservation.getReservationEndDate());
                    reservationList.add(reservation);
                }
            }catch (SQLException e){
                e.getStackTrace();
            }
            return reservationList;
        }
    
            PreparedStatement ps = ConnectorDB.connection.prepareStatement(sql2);
            ps.setString(1,reservation.getReservationStartDate());
            ps.setString(2,reservation.getReservationEndDate());
            ResultSet resultSet = ps.executeQuery();
            while (resultSet.next()){
                reservationList.add(reservation);
            }