51

java – 无效的列类型:没有为类oracle.jdbc.driver.T4CRowidAccessor实现getInt

 5 years ago
source link: https://codeday.me/bug/20190112/513085.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我想在oracle数据库11g中发布数据并且我使用输入字段输入数据,数据输入到数据库但只是id coulmn和另一个字符串coulmn得到正确的数据但是另一个coulmn得到null或0所以我无法解决这个问题在运行时我有这个错误

列类型无效:未对类oracle.jdbc.driver.T4CRowidAccessor实现getInt

这是我的代码

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;
}

}

这是我的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帮我把数据插入到表但不完整,我有这个运行时错误

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)

像Mark建议的那样,我只是面临同样的问题并找到了解决方案:

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

执行查询后,执行以下操作以获取插入的ID.

rs = stmt.getGeneratedKeys();
rs.next();
rs.getInt(1);

翻译自:https://stackoverflow.com/questions/19270465/invalid-column-type-getint-not-implemented-for-class-oracle-jdbc-driver-t4crowi


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK