De colonne non valide type: getInt pas mis en œuvre pour la classe oracle.jdbc.le pilote.T4CRowidAccessor
je veux publier des données dans la base de données oracle 11g et que je rentre les données en utilisant le champ de saisie de la les données d'entrée de base de données, mais juste l'id coulmn et une autre chaîne coulmn sont obtenir des données correctes mais un autre coulmn obtenir la valeur null ou 0 donc je ne peux pas résoudre ce problème et au moment de l'exécution, j'ai cette erreur
Invalid column type: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor
c'est mon 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;
}
}
et c'est mon 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" ;
m'aider plz les données de l'insert dans la table, mais pas complètement et j'ai cette erreur d'exécution
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)
Vous devez vous connecter pour publier un commentaire.
Comme la Marque a suggéré, j'ai juste connu le même problème et trouvé la solution:
Et après l'exécution de la requête, procédez de la manière suivante pour récupérer l'ID inséré.
L'Oracle JDBC driver ne retourne l'identifiant généré lors de l'utilisation de
Statement.RETURN_GENERATED_KEYS
de sorte que la première colonne de la de clés généréesResultSet
est pas unint
, mais retourne uneROWID
(voir la JDBC tutoriel sur la rowids) de la ligne insérée (de sorte que vous pouvez interroger la ligne vous-même). Pour autant que je sais la raison pour cela est que l'Oracle n'a pas un type d'identité, de sorte qu'il n'est pas réellement savoir quel champ est la clé générée.Au lieu de cela, vous devriez être en mesure de spécifier explicitement la colonne que vous voulez retourner à l'aide de
prepareStatement(String sql, int[] columnIndexes)
ouprepareStatement(String sql, String[] columnNames)
.CID
colonne de la ligne insérée, mais il ne le fait pas. Il contient les rowid, qui est un spécial pseudo-colonne définie par Oracle.prepareStatement(String sql, String[] columnNames)
récemment sur Oracle, j'ai donc supprimé cette mise en garde.Ne sais pas si ce problème est resoled ou pas, mais j'ai fait face à un même problème et il s'est résolu par le remplacement de Entier avec int dans la classe d'entité(dans votre cas, il est Client classe)