2013-02-11 2 views
0

서블릿에서 테이블을 생성하려고합니다. 하지만 wen이 실행되면 오류 java.sql.SQLException: ORA-00902: invalid datatype이 표시됩니다. 하지만 SQL 쿼리에서 동일한 쿼리를 실행하면 실행 중입니다.java.sql.SQLException : ORA-00902 : 유효하지 않은 데이터 유형

스택 추적 :

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) 

그리고 내 코드는 다음과 같습니다

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 

사람이 ......... 내가 만든 어떤 실수 덕분에 알려주세요 ......

+0

'stC.execute()'를 시도해 볼 수 있습니까? Link : http://www.mkyong.com/jdbc/jdbc-statement-example-create-a-table/ – Apurv

+2

'COMMENTS (UNAME VARCHAR2 (50)'달성에 이상한 컬럼 정의와 같은 소리가 난다.) –

+0

구문은'create table foo (col1 ...) '입니다. *** NOT ***'create table (foo (col1 ...)' –

답변

2

두 문 모두에 ')'이 없으므로 표 이름 앞에 '(' 개구부를 삭제하십시오.

편집 : 당신이 등, TO, FROM, ID와 같은 arods을 사용하는 두 번째 문에서

가, 이들은 종종 충돌을 일으킬 수있는 키워드. 열 메시지 IST는 기본 널 (null)로 정의 다음 NOT NULL :

당신이 어딘가에 cut'n'paste 오류의 피해자가있는 것처럼
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) 
+0

이제 제 2 문에 대해 잘못된 식별자가 표시됩니다 –

+0

@James - 아마도 Java 코드가 아닌 * 생성 된 * SQL 코드를 검사해야합니다 –

+0

@James는 두 번째 문장에도 닫는 괄호를 추가 했습니까? – CloudyMarble

1

가 보이는;

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

...와 유사한 SQL 문을 생성합니다.

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

뭔가 더 합리적 일 것입니다.

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

... 줄 것입니다;

create table uname_table (
    UNAME VARCHAR(50), 
    COMMENTS VARCHAR2(1100), 
    ITEMID NUMBER 
) 
관련 문제