Oracle SODA API для Java - Исключение - отсутствует правая скобка - PullRequest
0 голосов
/ 19 сентября 2019

Я использую API Oracle SODA для JAVA.Я использую базу данных Oracle 12C.Я пытаюсь получить все записи из коллекции с сортировкой desc на поле.

Я написал запрос как,

{ "$query" : {}, "$orderby" : { "LmCreatedOn" : -1}}

Вот код Java,

//  connection code goes above
 final OracleDocument document = db.createDocumentFromString("{ \"$query\" : {}, \"$orderby\" : { \"LmCreatedOn\" : -1}}");

            final OracleCursor cursor = db.openCollection(SC_LMS_ADMIN_COURSE).find().filter(document).getCursor();

            List<JsonNode> listDto = new ArrayList<JsonNode>();

            while(cursor.hasNext()) {
                final OracleDocument doc = cursor.next();
                listDto.add(JacksonUtils.getObjectMapper().readTree(doc.getContentAsString()));
             }

Но я получаю исключение,

oracle.soda.rdbms.impl.SODAUtils $ 1OracleSQLException в oracle.soda.rdbms.impl.SODAUtils.makeExceptionWithSQLText (SODAUtils.java:112) вoracle.soda.rdbms.impl.SODAUtils.makeExceptionWithSQLText (SODAUtils.java:75) в oracle.soda.rdbms.impl.OracleOperationBuilderImpl.getResultSet (OracleOperationBuilderImpl.java.684) в oracle.sult.Ob.OracleOperationBuilderImpl.java:655) в oracle.soda.rdbms.impl.OracleOperationBuilderImpl.getCursor (OracleOperationBuilderImpl.java:702) в com.cisco.salesconnect.lms.SCLmsServiceHandler.getLMSCourses: SCLES:.lms.SCLmsService.getLMSCourses (SCLmsService.java:98) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Metfish.j.jpg.jj.jj.server.model.internal.ResourceMethodInvocationHandlerFactory $ 1.invoke (ResourceMethodInvocationHandlerFactory.java:81) в org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher $ 1.rava.et.jj.jj.Модельinternal.AbstractJavaResourceMethodDispatcher.dispatch (AbstractJavaResourceMethodDispatcher.java:99) в org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke (ResourceMethodInv)oker.java:389) в org.glassfish.jersey.server.model.ResourceMethodInvoker.apply (ResourceMethodInvoker.java:347) в org.glassfish.jersey.server.model.ResourceMethodInvoker.apply (ResourceMethodIn2) at2).glassfish.jersey.server.ServerRuntime $ 2.run (ServerRuntime.java:326) в org.glassfish.jersey.internal.Errors $ 1.call (Errors.java:271) в org.glassfish.jersey.internal.Errors $ 1.вызов (Errors.java:267) в org.glassfish.jersey.internal.Errors.process (Errors.java:315) в org.glassfish.jersey.internal.Errors.process (Errors.java:297) в org.glassfish.jersey.internal.Errors.process (Errors.java:267) в org.glassfish.jersey.process.internal.RequestScope.runInScope (RequestScope.java:317) в org.glassfish.jersey.server.ServerRuntime.process (ServerRuntime.java: 305) на org.glassfish.jersey.server.ApplicationHandler.handle (ApplicationHandler.java:1154) на org.glassfish.jersey.servlet.WebComponent.serviceImpl (WebComponent.java:473) на org.glassfish.jersey.servlet.WebComponent.service (WebComponent.java:427) в org.glassfish.jersey.servlet.ServletContainer.service (ServletContainer.java:388) в org.glassfish.jersey.servlet.ServletContainer.service (ServletContainer.java:341) в org.glassfish.jersey.servlet.ServletContainer.service (ServletContainer.java:228) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:231) в org.apache.catalina.core.ApplicationFilterCha) в org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193)в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:199) в org.apache.kevetatatataina(StandardContextValve.java:96) в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:493) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.javag: 137).catalina.valves.87) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:343) в org.apache.coyote.http11.Http11Processor.service (Http11Processor.java:798) в org.apache.coyote.Lbprocessor(AbstractProcessorLight.java:66) в org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:806) в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1498) в org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49)в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в org.apache.treadcatTra.run (TaskThread.java:61) в java.lang.Thread.run (Thread.java:748) Причина: java.sql.SQLSyntaxErrorException: ORA-00907: отсутствует правая скобка в oracle.jdbcФайлjdbc.driver.T4CTTIfun.receive (T4CTTIfun.java:522) в oracle.jdbc.driver.T4CTTIfun.doRPC (T4CTTIfun.java:257) в oracle.jdbc.driver.T4C8Oall.doOALL (T4C): t4C8.jdbc.driver.T4CPreparedStatement.doOall8 (T4CPreparedStatement.java:225) по адресу oracle.jdbc.driver.T4CPreparedStatement.doOall8 (T4CPreparedStatement.java:53) по адресу oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe (tj.tj)..executeMaybeDescribe (OracleStatement.java:925) при oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout (OracleStatement.java:1111) при oracle.jdbc.driver.OraclePreparedStatement.executeInternal (OraclePreparedStatement.java:4798) при oracle.jdbc.driver.OraclePreparedStatement.executeQuery (OraclePreparedStatement.java:4845) в oracle.jdbc.driver.больше

1 Ответ

0 голосов
/ 25 сентября 2019

Я решил эту проблему следующим образом:

Согласно oracle doc

Если вы используете Oracle Database Release 12c (12.1.0.2), то выдолжен указывать либо $ scalarRequired, либо $ lax;в противном случае возникает синтаксическая ошибка.

Поскольку я использую Oracle Database Release 12c (12.1.0.2).Я использовал запрос JSON без $scalarRequired.Вот почему он выдает синтаксическую ошибку.

Обновленный запрос:

{ \"$query\": {}, \"$orderby\" : { \"$fields\" : [{ \"path\" : \"LmCreatedOn\", \"datatype\" : \"varchar2\", \"order\" : \"desc\"}], \"$scalarRequired\" : true }}

Здесь я также обновил формат запроса в соответствии с документом Oracle.Я предоставил некоторые дополнительные fields с дополнительной информацией.Эта функция присутствует в последних soda jar 1.1.0

...