2017-10-05 104 views
0

我想在一個項目中使用sq2o。它的工作原理以及MSSQL下,但是當切換到Oracle數據庫有刪除的問題12Csql2o無法刪除Oracle數據庫

public void delete(final String x, final String y) { 
     final String query = "DELETE FROM XXX WHERE columnx = :x AND columny = :y"; 
     try (final Connection con = sql2o.beginTransaction(); 
      final Query q = con.createQuery(query)) { 
      q.addParameter("x", x); 
      q.addParameter("y", y); 
      q.executeUpdate(); 
      con.commit(); 
     } 
    } 

當我用這個方法,我得到相當神祕的日誌:

操作不允許org.sql2o.Sql2oException:錯誤在 的executeUpdate,操作不是在 com.fusionrisk.authorisation.impl.AuthorisationRoleDao.delete(AuthorisationRoleDao.java:55) org.sql2o.Query.executeUpdate(Query.java:527)允許在 com.fusionrisk。 authorisation.impl.AuthorisationService.deleteUs erRole(AuthorisationService.java:43) 處 sun.reflect.NativeMethodAccessorImpl.invoke fusionrisk.rest.AuthorisationResource.deleteRole(AuthorisationResource.java:59) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)(NativeMethodAccessorImpl。的java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)在 org.glassfish.jersey.server.model .internal.ResourceMethodInvocationHandlerFactory $ 1.invoke(ResourceMethodInvocationHandlerFactory.java:81) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher $ 1.run(AbstractJavaResourceMethodDispatcher.j AVA:151) 在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171) 在 org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ ResponseOutInvoker.doDispatch( JavaResourceMethodDispatcherProvider.java:152) 在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104) 在 org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker。的java:387) 在 org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:331) 在 org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:103) 在 org.glassfish.jersey.server.ServerRuntime $ 1.run(ServerRuntime.java:271) 在org.glassfish.jersey .internal.Errors $ 1.call(Errors.java:271)在 org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:267)在 org.glassfish.jersey.internal.Errors.process(錯誤的.java:315)處 org.glassfish org.glassfish.jersey.internal.Errors.process(Errors.java:297)在 org.glassfish.jersey.internal.Errors.process(Errors.java:267) .jersey.process.internal.RequestScope.runInScope(RequestScope.java:297) 在 org.glassfish.jersey.server.ServerRuntime.process(ServerR untime.java:254) 在 org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1028) 在 org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:372) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344) 在 org.glassfish.jersey.servlet .ServletContainer.service(ServletContainer.java:221) 在 org.eclipse。jetty.servlet.ServletHolder.handle在 org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1669) 在 org.eclipse.jetty.servlets.UserAgentFilter(ServletHolder.java:800) 。的doFilter(UserAgentFilter.java:83) 在 org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:300) 在 org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java: 1652) 在 org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:224) 在 org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)

在 com.trmsys.cargo.shield.web.filter.PrincipalShiroFilter.doFilter(PrincipalShiroFilter.java:228) 在 org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652 ) 在 org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) 在 com.trmsys.cargo.shield.shiro.web.ShieldFilter.access $ 100(ShieldFilter.java:34) 在 com.trmsys.cargo.shield.shiro.web.ShieldFilter $ 1.call(ShieldFilter.java:99) 在 org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) 在org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) 在 org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) 在 COM .trmsys.cargo.shield.shiro.web.ShieldFilter.doFilterInternal(ShieldFilter.java:95) 在 org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 在 org.eclipse .jetty.servlet.ServletHandler $ CachedChain.doFilter在 com.trmsys.cargo.security.cors.impl.CorsFilter.handleSimpleCORS(CorsFilter.java:345) (ServletHandler.java:1652) 在 com.trmsys.cargo .securi ty.cors.impl.CorsFilter.doFilter(CorsFilter.java:188) 在 org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652) 在 com.trmsys.cargo.rs。 shared.impl.http.RequestLogFilter.doFilter(RequestLogFilter.java:59) 在 org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652) 在 org.eclipse.jetty.servlet。 ServletHandler.doHandle(ServletHandler.java:585) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle( ContextHandler.java:1125) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 在 org.eclipse。 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server。org.eclipse.jetty.server。 handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 在org.eclipse.jetty.server.Server.handle(服務器.java:497)at org。eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248) at org.eclipse.jetty.io.AbstractConnection $ 2。運行(AbstractConnection.java:540) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620) 在 org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool .java:540) at java.lang.Thread.run(Thread.java:745)導致: java.sql.SQLException:操作不允許在 oracle.jdbc.driver.OracleStatement.getGeneratedKeys(OracleStatement.java: 5174) at oracle.jdbc.driver.OracleStatementWrapper。的getGeneratedKeys(OracleStatementWrapper.java:352) 在 org.apache.commons.dbcp.DelegatingStatement.getGeneratedKeys(DelegatingStatement.java:315) 在 org.apache.commons.dbcp.DelegatingStatement.getGeneratedKeys(DelegatingStatement.java:315) 在org.sql2o.Query.executeUpdate(Query.java:522)... 67共同 幀省略

它只是刪除。插入和檢索工作正常。

我是googling這個問題,但唯一的結果是圍繞封閉resulSet解決這是不是在這裏的情況。

回答

0

這不是一個很好的答案,但我最近在Eclipse下開發了sql2o,並且我發現找出一些問題的唯一方法是使用源進行構建並將其追蹤到拋出異常的位置。耗時,但不如在黑暗中拍攝。

0

根據錯誤

operation not allowed org.sql2o.Sql2oException: Error in executeUpdate, operation not allowed at org.sql2o.Query.executeUpdate(Query.java:527) at

我想說的是,刪除權限丟失。將其授予給用戶並重試。