복붙노트

[SQL] JDBC와 SQL에서 날짜 사이세요?

SQL

JDBC와 SQL에서 날짜 사이세요?

저는 현재 테이블에 참견 마라 데이터베이스 파일 및 표시 특정 정보에서 데이터를 읽는 자바 스윙 응용 프로그램을 쓰고 있어요. 나는 성공적으로 필요한 SQL 문을 생성 할 수있었습니다 그러나 나는 (우리는 한계 결과에 노력하고있다, 그래서 우리의 데이터베이스가 꽤 큰) 날짜 사이에 검색 할 수있는 기능을 추가하는 데 문제가 있습니다. 내 쿼리 중 하나의 예는 다음 (자바로 작성된)한다 :

rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
                        + "FROM sales, customers "
                        + "WHERE sales.CardRecordID = customers.CardRecordID "
                        + "AND customers.Name = 'Cash Sales' "
                        + "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
                        + ";");

나는 (그들이 실제로 자바에서 문자열하지만 일 / 월 / 년으로 포맷 된) 두 날짜가 있습니다.

나는 다른 AND 절을 사용하여 시도 내 WHERE와 문 BETWEEN하지만 오른쪽 피연산자의 문자 값을 받고 JDBC [MYOB ODBC] 오류에서 다음과 같은 오류가 발생합니다.

실제 문은 다음과 같습니다 :

rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
                        + "FROM sales, customers "
                        + "WHERE sales.CardRecordID = customers.CardRecordID "
                        + "AND customers.Name = 'Cash Sales' "
                        + "AND sales.Date BETWEEN " + sdate + " AND " + edate + " "
                        + "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
                        + ";");

그 누구도 날이에 대한 올바른 구문을 작업 할 수 있도록 할 수 있습니까? 그것은 실종 기능의 마지막 조각입니다.

편집 : 그들은 오늘 날짜로 기본 설정으로 sdate 및 EDATE의 현재 값은 각각 모두 25/10/2013이다. 나는이 날짜 범위에 데이터를 제공을 보장하기 위해 테스트입니다 더미 파일을 설정했습니다. 또한 clarficiation 위해 나는 INCLUSIVE로 검색 날짜를하고 싶습니다.

해결법

  1. ==============================

    1.따옴표를 날짜 주위에 사용

    따옴표를 날짜 주위에 사용

    rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
                + "FROM sales, customers "
                + "WHERE sales.CardRecordID = customers.CardRecordID "
                + "AND customers.Name = 'Cash Sales' "
                + "AND sales.Date BETWEEN '" + sdate + "' AND '" + edate + "' "
                + "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
                + ";");
    

    아니면 (날짜 예를 들어 신뢰할 수없는 입력에서 오는 경우) 준비된 문을 사용하는 것이 더 안전 할 수 있습니다

    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    java.util.Date startDate = formatter.parse(sdate);
    java.util.Date endDate = formatter.parse(edate);
    PreparedStatement pstmt = connection.prepareStatement("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
                + "FROM sales, customers "
                + "WHERE sales.CardRecordID = customers.CardRecordID "
                + "AND customers.Name = 'Cash Sales' "
                + "AND sales.Date BETWEEN ? AND ? "
                + "ORDER BY sales.ShipToAddress ASC, sales.Date DESC");
    pstmt.setDate(1, new java.sql.Date(startDate.getTime()))
    pstmt.setDate(2, new java.sql.Date(endDate.getTime()))
    

    사이 연산자는 포함하지만, 데이터베이스 필드가 실제로 타임 스탬프의 경우, 다음 짧은 시간과 날짜는 시간을 00으로 가정 : 00 : 00.000. 날짜가 포함 될 수 있도록 그래서, 이러한 경우에, 당신은 당신의 종료 날짜에 하루 추가 할 수 있습니다. (: 00 : 00 00.000 시간) 기술적으로는 다음 날의 첫 순간을 포함하지만, 응용 프로그램에 따라하는 것은 충분히있을 수 있습니다.

    그렇지 않으면 및 < "종료 날짜 플러스 일일"의 "시작 날짜"에> = 사용할 수 있습니다 :

    "sales.Date >= '" + sdate + "' AND sales.Date < '" + edatePlusOne + "' "
    
  2. ==============================

    2.이 형식의 날짜를 표현해야 할 것 같습니다 :

    이 형식의 날짜를 표현해야 할 것 같습니다 :

    선택 * 테이블의 경우 '2006-10-01'와 '2006년 11월 30일'사이하여 DateField

    구글이 당신의 친구입니다 잊지 마세요, 여기 봐! :)

  3. ==============================

    3.

    Class.forName("com.mysql.jdbc.Driver");
    
    connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospitall","root","");
    
    PreparedStatement ps=connection.prepareStatement("select * from patient where patientid='"+txtpatientid.getText()+"'");
    
    Statement stm=connection.createStatement();
    
    ResultSet rs=ps.executeQuery();
    
    if(rs.next()){
    
    String patientid=txtpatientid.getText(); 
    
    String str="select * from patient where patientid='"+patientid+"'";
    
    ResultSet result=stm.executeQuery(str);
    
  4. from https://stackoverflow.com/questions/19583806/searching-between-dates-in-sql-with-jdbc by cc-by-sa and MIT license