简体   繁体   中英

java.sql.SQLException: ORA-00902: invalid datatype

I'm trying to create a table from servlet. But wen i run, it was showing the error java.sql.SQLException: ORA-00902: invalid datatype . But when i execute the same query in sql plus it was executing .

stack trace :

java.sql.SQLException: ORA-00902: invalid datatype
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:194)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1000)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1814)
at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1779)
at oracle.jdbc.driver.OracleStatementWrapper.executeUpdate(OracleStatementWrapper.java:277)
at skypark.CreateUserAc.doGet(CreateUserAc.java:126)
at skypark.CreateUserAc.doPost(CreateUserAc.java:345)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at skypark.Registration.doPost(Registration.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
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:222)
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:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
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:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

And my code is :

  Statement stC=con.createStatement();
    StringBuilder sbC=new StringBuilder(1024);
    sbC.append("create table ").append(uname).append("COMMENTS(UNAME VARCHAR2(50),COMMENTS VARCHAR2(1100),ITEMID NUMBER)");
    String QueryC=sbC.toString();
    stC.executeUpdate(QueryC);         //stack trace showing error

    Statement stCH=con.createStatement();
    StringBuilder sbCH=new StringBuilder(1024);
    sbCH.append("create table ").append(uname).append("CHAT(ID NUMBER NOT NULL,FROM VARCHAR2(50),TO VARCHAR2(50),MESSAGE VARCHAR2(500) DEFAULT NULL NOT NULL,SENT DATE NOT NULL, RECD NUMBER)");
    String QueryCH=sbCH.toString();
    stCH.executeUpdate(QueryCH);     //stack trace showing error

Please anyone tell me what mistake i made.........thanks.......

I guess you are missing a closing ')' in both statements, try to delete the opening '(' before the table name.

EDIT:

In the second statement you are using arods like ID, FROM, TO, etc, these are often keywords which can cause conflicts. The column MESSAGE ist defined as default null then not null :

create table (CHAT(ID NUMBER NOT NULL,
              FROM VARCHAR2(50),
              TO VARCHAR2(50),
              MESSAGE VARCHAR2(500) DEFAULT NULL NOT NULL,  
              SENT DATE NOT NULL, RECD NUMBER)

Looks like you're a victim of a cut'n'paste error somewhere;

sbC.append("create table ").append(uname)
   .append("(COMMENTS(UNAME VARCHAR2(50),COMMENTS VARCHAR2(1100),ITEMID NUMBER)");

...will lead to an SQL statement similar to;

create table uname_table (
  COMMENTS(UNAME VARCHAR(50),     <-- strange indeed, cut'n'paste?
  COMMENTS VARCHAR2(1100),
  ITEMID NUMBER
)

Something more reasonable would be;

sbC.append("create table ").append(uname)
   .append("(UNAME VARCHAR2(50),COMMENTS VARCHAR2(1100),ITEMID NUMBER)");

...which would give;

create table uname_table (
  UNAME VARCHAR(50),
  COMMENTS VARCHAR2(1100),
  ITEMID NUMBER
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM