데이터 유형 :
timestamp
열 이름 :
dlExpiryDate
SELECT *
FROM QUALIFICATION
WHERE dlExpiryDate >= NOW()
AND dlExpiryDate < NOW() + INTERVAL 1 MONTH;
답을 얻기 위해 많은 양의 쿼리를 시도했지만 작동하지 않습니다. 누구나이 문제를 해결하기위한 대답을 얻었습니다. 위에서 시도한 예제가 있지만 작동하지 않습니다. 스택 추적을 인쇄했습니다 :
Severe: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "1" at line 1, column 93. at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) at org.apache.derby.client.am.Statement.executeQuery(Unknown Source) at org.apache.jsp.viewQualification_jsp._jspService(viewQualification_jsp.java:105) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.derby.client.am.SqlException: Syntax error: Encountered "1" at line 1, column 93. at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source) at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source) at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.am.Statement.flowExecute(Unknown Source) at org.apache.derby.client.am.Statement.executeQueryX(Unknown Source) ... 36 more
누구든지 이것에 대한 답변을 받았습니까? 감사합니다
- 답변 # 1
- 답변 # 2
시간대
와이즈 비즈 Derby의 유형은 SQL 표준 유형
예를 들어 2019 년 1 월 23 일 정오를 저장 한 경우, 일본 도쿄에서 정오를 의미했는지 또는 콜카타 인도에서 정오 이전에 정오를 의미했는지 알 수 없습니다. 아니면 몇 시간 후에 파리 프랑스 정오를 의미했을 수도 있습니다. 또는 정오가 몬트리올 퀘벡에 도착했을 때 더 많은 시간 후에. 이 유형의 값은 26-27 시간 범위의 여러 순간 동안 23 일어딘가에 정오를 의미합니다.TIMESTAMP
와 유사합니다. (적어도 문서가 제대로 작성되지 않은 것 같습니다). 즉, 해당 유형에는 표준 시간대 또는 UTC에서 오프셋 개념이 없습니다. 따라서이 유형은 타임 라인의 특정 지점 인아님을 나타냅니다. 대신, 전 세계 시간대 인 26-27 시간 범위의잠재적순간을 나타냅니다.현재의 현재 시점과 비교할 때이 유형에 대해쿼리를 수행하는 것은 의미가 없습니다.
그러나…
앱에서 시간대를 처리하고 데이터베이스의 모든 값이 특정 시간대 인 것처럼 가장 한 경우 현재 시점을 캡처 할 때 해당 시간대를 사용하십시오.
와이즈 위즈java.time클래스에서
TIMESTAMP WITHOUT TIME ZONE
를 사용합니다 특정 지역 (시간대)의 사람들이 사용하는 벽시계 시간의 순간을 나타냅니다.ZonedDateTime
ZonedDateTime
를 사용하여 귀중한 영역/오프셋 정보 삭제우리는 시간대 정보를 제거하여
ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime zdt = ZonedDateTime.now( z ) ; // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
에 날짜와 시간 만 남겨 둘 수 있습니다. 개체.LocalDateTime
한 달을 검색하는 경우 하루가 시작될 때 시작하고 싶을 것입니다. 일광 절약 시간 (DST)과 같은 예외로 인해 하루가 항상 00:00에 시작되는 것은 아니기 때문에java.time에서 오늘의 첫 순간을 결정하게 할 것입니다. 그러나
LocalDateTime
와 함께 영역/오프셋이 없으면 이러한 이상을 설명 할 수 없습니다. 그래서 우리는 00:00과 함께 갈 것입니다.LocalDateTime ldt = zdt.toLocalDateTime()
월을 추가하기 위해
LocalDateTime
를 사용하여 날짜-시간 수학을 할 수 있습니다 그리고LocalDateTime ldtStartOfDay = ldt.with( LocalTime.MIN ) ;
방법.plus…
준비된 명령문에서 SQL의 플레이스 홀더를 바꾸려면이 값을 전달하십시오.
minus…
JDBC 4.2 이상에서
LocalDateTime ldtMonthLater = ldtStartOfDay.plusMonths() ;
를 사용하여java.time객체를 데이터베이스와 직접 교환 할 수 있습니다 &SELECT * FROM QUALIFICATION WHERE dlExpiryDate >= ? AND dlExpiryDate < ? ;
.setObject
와 같은 끔찍한 레거시 클래스를 사용할 필요가 없습니다. .getObject
검색 할 때.
java.sql.Timestamp
다른 데이터베이스 사용을 고려할 수도 있습니다. 오라클은 Derby를Java DB로 번들링하는 것을 중단했습니다. 프로덕션 용도로는 적합하지 않은 것으로 밝혀졌습니다.
자바로 작성된 오픈 소스 데이터베이스를 원한다면 서버뿐만 아니라 임베디드 사용에 적합한 H2 데이터베이스 엔진을 제안한다. 강력한 엔터프라이즈 급 작업을 위해 구축 된 오픈 소스 데이터베이스 서버를 원한다면 Postgres를 추천합니다.
<시간> java.time정보java.time프레임 워크는 Java 8 이상에 내장되어 있습니다. 이 클래스는
myPreparedStatement.setObject( 1 , ldtStartOfDay) ; myPreparedStatement.setObject( 2 , ldtMonthLater) ;
와 같은 번거로운 오래된 레거시 날짜-시간 클래스를 대체합니다.LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
및java.util.Date
.유지 보수 모드 인Joda-Time프로젝트는 java.time 클래스로의 마이그레이션을 권장합니다.
자세한 내용은Oracle Tutorial을 참조하십시오. 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.
java.time객체를 데이터베이스와 직접 교환 할 수 있습니다. JDBC 4.2 이상을 준수하는 JDBC 드라이버를 사용하십시오. 문자열 필요,
Calendar
필요 없음 수업.java.time 클래스는 어디서 구할 수 있습니까?
Java SE 8,Java SE 9,Java SE 10,Java SE 11이상- 번들로 구현 된 표준 Java API의 일부입니다.
Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
Java SE 6및Java SE 7
java.time기능의 대부분은ThreeTen-Backport에서 Java 6&7로 백 포트됩니다.
Android
java.time클래스의 최신 버전의 Android 번들 구현
이전 Android (<26)의 경우ThreeTenABP프로젝트는ThreeTen-Backport에 적용됩니다 (위에서 언급). .threeTenABP 사용 방법…을 참조하십시오.
ThreeTen-Extra프로젝트는 추가 클래스로 java.time을 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다.
SimpleDateFormat
와 같은 유용한 클래스가 있습니다.java.sql.*
Interval
등이 있습니다.YearWeek
관련 자료
- sql - 프로 시저의 if 문 내에서 MySQL 선택
- postgresql - select 문 (postgres) 내에 계산 저장
- .net - 쿼리에서 중첩 된 case 문으로 레코드를 업데이트하지 않는 SQL 서버
- mysql - select 문이있는 여러 데이터를 삽입하고 해당 select 문의 FROM 테이블은 삽입하려는 테이블과 같습니다
- 중복 된 행 처리 - sql의 내부 조인에 select 문 포함
- excel formula - "IF 문"을 사용하여 범위에서 숫자를 선택하려면 어떻게합니까?
- postgresql - SELECT 문에서 SQL 정규식 (LIKE) 사용
- javascript - KnexJS는 올해의 모든 레코드를 선택합니다
- javascript - 단락 내의 PHP 에코는 모든 레코드에서 작동하지 않습니다
- 파이썬의 함수 내에서 for 루프의 return 문
- javascript - select 옵션을 비활성화하기 위해 if 문을 만드는 방법은 무엇입니까?
- python - 하나의 select 문에서 최소 및 최대 사용 (버기 출력?)
- javascript - 다른 함수 'For loop'문에서 나중에 호출 할 함수 내에 'continue'문 삽입
- ms access - 여러 레코드를 단일 레코드로 병합하기 위해 SQL 문을 작성하는 방법은 무엇입니까?
- SQL Server 내의 특정 선택
- Cypress - 사이프러스 - 다른 요소 내에서 요소를 선택하십시오`내`에 대한 선택기 구문 단축키
- 하나의 pyspark 데이터 프레임에서 다른 레코드의 고유 레코드 또는 알 수없는 값을 사용하여 레코드를 선택하는 방법
- mysql - sequelize에서 중첩 된 select 문을 작성하는 방법은 무엇입니까?
- mysql - select 문을 기반으로 여러 행을 업데이트하는 방법은 무엇입니까?
- select 문을 사용하여 SQL 2008 r2에서 누락 된 데이터를 처리하는 방법은 무엇입니까?
데이터베이스와 무관하게 해당 쿼리를 수행하려면 Java 코드에서 2 개의 날짜를 해결하고
PreparedStatement
를 사용하여 제공하십시오. .JDBC 드라이버 (예 : Microsoft 아님)에 따라
setObject
를 사용할 수도 있습니다. .