2016-08-13 40 views
-1

我已經創建了Apache Derby的一個序列:嵌入式的Apache Derby序列

CREATE SEQUENCE app.patient_id_seq AS BIGINT START WITH 100000 INCREMENT BY 1; 

我得到在德比控制檯一個序列值 -

values NEXT VALUE FOR patient_id_seq; 

但是,當我在Java代碼中使用它來獲取下一序列,它說 -

java.sql.SQLSyntaxErrorException:序 'APP.PATIENT_ID_SEQ' 並不 不存在

17:52:50291 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知 源)

17:52:50301 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知來源)

17:52:50312 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)

17:52:50323 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(未知 源)

17 :52:50336 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.jdbc.EmbedConnection.handleException(未知 源)

17:52:50347 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)

17:52:50357 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)。在 org.apache.derby.impl.jdbc.EmbedPreparedStatement(未知 源)

17時52分:50371 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.jdbc.InternalDriver.newEmbedPreparedStatement(未知 源)

17:52:50382 ERROR [標準錯誤] (ajp-localhost/127.0.0.1:8009-1)at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)

17:52:50397 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(未知 源)

17時52 :50408 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 com.laput.dao.PatientDAO.savePatientDetails(PatientDAO.java:30)

17:52:50420 ERROR [標準錯誤] (AJP-本地主機/ 127.0.0.1:8009-1)在 com.laput.dao.PatientDAO.savePatientInfo(PatientDAO.java:21)

17:52:50431 ERROR [stderr的](AJP-本地主機/ 127.0 0.0。1:8009-1)at com.laput.controller.HospController.login(HospController.java:66)

17:52:50,443 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)在 sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)

17:52:50454 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl的.java:57)

17:52:50465 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43 8009-1))

17:52:50477 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 java.lang.reflect.Method.invoke(Method.java:606)

17: 52:50491 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)

17時52: 50,509 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)

17:52:50,522 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)

17:52:50535 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java: 827)

17:52:在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter 8009-1):50552 ERROR [stderr的](AJP-本地主機/ 127.0.0.1。 java:738)

17:52:50566 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)

17:52:50579 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)

17:52:50,591 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)

17:52:50606 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)

17: 52:50618 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)

17:52:50629 ERROR [標準錯誤](AJP-本地主機/ 127.0.0.1:8009-1)在 javax.servlet.http.HttpServlet.service(HttpServlet.java:754)

17:52:50640 ERROR [stderr的](ajp-本地主機/ 127.0.0。1:8009-1)在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)

17:52:50657 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009- 1)在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

17:52:在 組織8009-1):50669 ERROR [stderr的](AJP-本地主機/ 127.0.0.1。 apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)

17:52:在 org.apache.catalina:50685 ERROR [stderr的](8009-1 AJP-本地主機/ 127.0.0.1)。 core.ApplicationFilterChain.doFilter(A pplicationFilterChain.java:214)

17:52:50697 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 230)

17:52:50711 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)

17:52:50,723 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)

17:52:50735 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)

17 :52:50747 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)

17:52:50767 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)

17:52:50780 ERROR [stderr的在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)

17:(8009-1 AJP-本地主機/ 127.0.0.1):52:50792 ERROR [stderr的](ajp-本地主機/ 127.0.0.1:8009-1)在 org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:488)

17:52:50803 ERROR [stderr的](AJP-本地主機/ 127.0。 0.1:8009-1)在 org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(AjpProtocol.java:420)

17:52:50816 ERROR [stderr的](AJP-本地主機/ 127.0.0.1: 8009-1)at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:920)

17:52:50827 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 java.lang.Thread.run(Thread.java:744)

17:52:50,838錯誤[stderr](ajp-localhost/127.0.0.1:8009-1) 錯誤:錯誤42X94:SEQUENCE'APP.PATIENT_ID_SEQ'不存在。

17:52:50,849錯誤[stderr](ajp-localhost/127.0.0.1:8009-1)at org.apache.derby.iapi.error.StandardException。newException(未知 源)

17:52:50864 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.iapi.error.StandardException.newException(未知 源)

17:52:50875 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.sql.compile.NextSequenceNode.bindExpression(未知 源)

17:52:50,886 ERROR [stderr](ajp-localhost/127.0.0.1:8009-1)at org.apache.derby.impl.sql.compile.ValueNode.bindExpression(Unkno WN 源)

17:52:50898 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(未知 源)

17:52:50911 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(未知 源)

17:52:50924 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.sql.compile.RowResultSetNode.bindExpressions(未知 源)

17:52:50935 ERROR [stderr的](AJP-本地主機/ 127.0.0.1:8009-1)在 org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(未知 源)

====================

我的Java代碼來獲得序列 -

 ResultSet rs = conn.prepareStatement("values next value for patient_id_seq").executeQuery(); 

感謝, laput

+0

[如何在Apache Derby中使用序列?(http://stackoverflow.com/questions/5729063/how-to-use-sequence-in-apache-derby) –

+0

好了,重複的可能的複製問題可能並沒有多大幫助,因爲您已經使用正確的語法獲取序列值。你確定這個序列實際上是被創建的 - 而且你正在連接到正確的數據庫? –

+0

您可以創建一個最小的測試用例來演示問題嗎? –

回答

0

OP在這裏再次, 此外,試圖內DB創建序列與 -

創建表patient_info( Patient_id BIGINT GENERATED ALWAYS AS IDENTITY(100000開始,遞增1), FIRST_NAME VARCHAR(50) 姓氏VARCHAR(50), phone_no INT, address_ln1 VARCHAR(100), address_ln2 VARCHAR(100), 城市VARCHAR(100), 狀態VARCHAR(50), 約束primary_key PRIMARY KEY(Patient_id) );

但是,當使用預先準備的語句插入時,它仍然期望在Java代碼中分配/設置「Patient_id」,但不應該如此。

兩種方法都失敗了。

0

Bryan, 這是細節。

創建序列 - CREATE SEQUENCE app。patient_id_seq AS BIGINT START WITH 100000 INCREMENT BY 1;

我的代碼進入電影序列 -

package com.laput.dao; 

import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 

public class Testcase { 
    Connection conn = null; 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Testcase tc = new Testcase(); 
     tc.createConnection(); 
     tc.savePatientDetails(); 

    } 


    private void savePatientDetails(){ 

     try{ 
      ResultSet rs = conn.prepareStatement("values next value for patient_id_seq").executeQuery(); 
      rs.next(); 




      conn.commit(); 
      conn.close(); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 

    } 


    private void createConnection() 
    { 

     try 
     { 
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 
      //Get a connection 
      conn = DriverManager.getConnection("jdbc:derby:C:\\ProgramData\\tools\\apache-derby\\db-derby-10.12.1.1-bin\\hospdb"); 
     } 
     catch (Exception except) 
     { 
      except.printStackTrace(); 
     } 
    } 

} 

我能夠通過德比控制檯訪問序列。但從Java我得到的錯誤提到。

+0

任何幫助表示讚賞。 – laput

0
SELECT NEXT VALUE FOR SEQ_ID FROM SYS.SYSSEQUENCES; 

你可以通過這個查詢來獲取序列下一個值。

0

第一個查詢是獲取數據庫中的序列名稱列表。 第二個查詢是獲取序列下一個值。

Oracle:SELECT SEQUENCE_NAME FROM USER_SEQUENCES; SELECT SEQ_ID.NEXTVAL FROM DUAL;

sqlsever:SELECT NAME FROM mydbname.sys.sequences; SELECT NEXT VALUE FOR mydbname.schemaName.SEQ_ID;

DB2 SELECT SEQNAME FROM SYSCAT.SEQUENCES WHERE SEQSCHEMA = 'schemaName'; SELECT SEQID.NEXTVAL FROM SYSIBM.SYSDUMMY1;

postgrsql:SELECT c.relname FROM pg_class c WHERE c.relkind ='S'; SELECT NEXTVAL('SEQ_ID');

HirDB:SELECT SEQUENCE_NAME FROM MASTER.SQL_SEQUENCES;

JavaDB:SELECT SEQUENCENAME FROM SYS.SYSSEQUENCES; SELECT NEXT VALUE FOR SEQ_ID FROM SYS.SYSSEQUENCES;