在Oracle有个字段是number类型但用下面的sql语句一直报错,这是怎么样的错误?pst = conn.prepareStatement("select * from TPVFRAME_PUBLICATION where number=?");
pst.setLong(1, id);
rset = pst.executeQuery();
报错如下java.sql.SQLSyntaxErrorException: ORA-00936: 遺漏表示式 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493)
at com.publication.db.DBFunction.retrieveDataFromDB(DBFunction.java:116)
at com.publication.list.retrieveContent.doPost(retrieveContent.java:31)
at com.publication.list.retrieveContent.doGet(retrieveContent.java:23)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
oraclejdbcjavasql

解决方案 »

  1.   

    sql错误。
    show_sql打开看看实际的完整sql是什么
      

  2.   


    id給了 1 (int 和long都試過)
      

  3.   

    看下表TPVFRAME_PUBLICATION的结构。
      

  4.   


    沒使用hibernate
    只是普通的JDBC
      

  5.   

    CREATE TABLE "PLMWFLOW"."TPVFRAME_PUBLICATION" 
       ( "NUMBER" NUMBER NOT NULL ENABLE, 
    "ISTOP" VARCHAR2(1 BYTE) NOT NULL ENABLE, 
    "DUEDATE" DATE NOT NULL ENABLE, 
    "SUBJECT" VARCHAR2(200 BYTE) NOT NULL ENABLE, 
    "CONTENT1" VARCHAR2(4000 BYTE) NOT NULL ENABLE, 
    "CONTENT2" VARCHAR2(4000 BYTE), 
    "PUBLISHDATE" DATE NOT NULL ENABLE, 
     CONSTRAINT "TPVFRAME_PUBLICATION_PK" PRIMARY KEY ("NUMBER")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "USERS"  ENABLE
       ) SEGMENT CREATION IMMEDIATE 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "USERS" ;
      

  6.   

    "PLMWFLOW"."TPVFRAME_PUBLICATION" 为什么要带引号?
      

  7.   


    用 Oracle SQL Developer 建的表
    里面的SQL显示自动带了引号
    我刚才改成用String的字段可以正常查找数据
    只有number的没办法查找
    是不是传入的值有错?
      

  8.   

    或者pst.setObject(1, id);,让他自己去匹配
      

  9.   


    都不行后来使用Oracle SQl Developer里使用
    select * from tpvframe_publication WHERE number=1;
    依然出现一样的报错,number该怎么查找?
      

  10.   

    select * from tpvframe_publication WHERE number=1;
    这样都报错?
      

  11.   


    知道原因了,因为我犯了个很大的错误,就是用了关键词当字段名,改掉就行了。
    select * from tpvframe_publication WHERE number=1;