Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invalid column type: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor

i want to post data in oracle database 11g and i enter the data using input field the the data enter to data base but just id coulmn and another string coulmn are get correct data but another coulmn get null or 0 so i can not resolve this problem and in run time i have this error

Invalid column type: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor

this is my code

    public Client newClient(Client client){
    try {
        con = DBConnection.getConnection(driver, url, name, pass);      
        pstmt = con.prepareStatement("INSERT INTO CLIENT (CID, FIRSTNAME, LASTNAME, CAREER, CSALARY) VALUES (CLIENT_ID.nextval, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);

        pstmt.setString(1, client.getFirstName());
        pstmt.setString(2, client.getLastName());
        pstmt.setString(3, client.getCareer());
        pstmt.setInt(4, client.getcSalary());
        pstmt.executeUpdate();      
        rs = pstmt.getGeneratedKeys();
         rs.next();
       Integer id = rs.getInt(1);
            client.setcId(id);          
    }catch(Exception ex){
        ex.printStackTrace();
        return null;
    }finally{
        try{ rs.close(); }catch (Exception e){}
        try{ pstmt.close();}catch (Exception e){}
        try{ con.close();}catch (Exception e){}
    }//finally
    return client;
}   

}

@XmlRootElement
    public class Client {
private Integer cId;
private String firstName;
private String lastName;
private String career;
private int cSalary;
public Integer getcId() {
    return cId;
}
public void setcId(Integer cId) {
    this.cId = cId;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getCareer() {
    return career;
}
public void setCareer(String career) {
    this.career = career;
}
public int getcSalary() {
    return cSalary;
}
public void setcSalary(int cSalary) {
    this.cSalary = cSalary;
}

}

and this is my SQL

  CREATE TABLE "AHMAD"."CLIENT" 
  ( "CID" NUMBER(*,0) NOT NULL ENABLE, 
"FIRSTNAME" VARCHAR2(255 BYTE), 
"LASTNAME" VARCHAR2(255 BYTE), 
"CAREER" VARCHAR2(255 BYTE), 
"CSALARY" NUMBER, 
 CONSTRAINT "CLIENT_PK" PRIMARY KEY ("CID")
   USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
 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" ;

plz help me the data is insert into table but not completly and i have this run time error

             java.sql.SQLException: Invalid column type: getInt not implemented for   class oracle.jdbc.driver.T4CRowidAccessor
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.Accessor.unimpl(Accessor.java:358)
at oracle.jdbc.driver.Accessor.getInt(Accessor.java:468)
at oracle.jdbc.driver.OracleReturnResultSet.getInt(OracleReturnResultSet.java:265)
at com.rest.client.ClientDAO.newClient(ClientDAO.java:99)
at com.rest.client.ClientResourcs.newClient(ClientResourcs.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at        com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.jav a:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
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:936)
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)
like image 252
Ahmad Avatar asked Oct 09 '13 11:10

Ahmad


1 Answers

Like Mark suggested, I just faced the same problem and found the solution:

String generatedColumns[] = { "ID" };
stmt = con.prepareStatement(query, generatedColumns);

And after you execute the query, do the following to fetch the inserted ID.

rs = stmt.getGeneratedKeys();
rs.next();
rs.getInt(1);
like image 96
Ali Bassam Avatar answered Nov 15 '22 17:11

Ali Bassam