Falha ao converter para representação interna

12 respostas
R

Amigos,

estou com esse erro abaixo:

java.sql.SQLException: Falha ao converter para representação interna
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:219)
	at oracle.jdbc.driver.OracleStatement.getLongValue(OracleStatement.java:3022)
	at oracle.jdbc.driver.OracleStatement.getIntValue(OracleStatement.java:2975)
	at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:309)
	at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1354)
	at br.com.odontoprev.implantacao.DAO.GrupoDAO.listarGrupo(GrupoDAO.java:161)
	at br.com.odontoprev.implantacao.bo.GerenciadorGrupo.listarGrupo(GerenciadorGrupo.java:10)
	at br.com.odontoprev.implantacao.actions.ClienteAction.abrirCliente(ClienteAction.java:80)
	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 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
	at br.com.odontoprev.implantacao.actions.MainAction.execute(MainAction.java:23)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:480)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:502)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
	at java.lang.Thread.run(Unknown Source)
e o metodo que esta falhando é esse:
public static ArrayList listarGrupo() throws SQLException {
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = null;
		ArrayList listaGrupo = null;
		Connection conn = null;
		try {
			conn = DBConnection.getConnection();
			sql = "select cd_empresa_grsoc,upper(nm_fantasia_empresa)nm_fantasia_empresa from tbod_empresa where cd_empresa in ("+
"select distinct cd_empresa_grsoc from tbod_empresa) order by cd_empresa_grsoc ";
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();

			listaGrupo = new ArrayList();

			while (rs.next()) {
				Parametro p = new Parametro();
				p.setCodigo(rs.getInt("cd_empresa_grsoc"));
				p.setDescricao(rs.getString("cd_empresa_grsoc")+'-'+rs.getString("nm_fantasia_empresa"));
				listaGrupo.add(p);
			}
		} catch (SQLException e1) {
			e1.printStackTrace();
		} finally {
			if (conn != null) {
				conn.close();
			}
			if (ps != null) {
				ps.close();
			}
			if (rs != null) {
				rs.close();
			}
		}
		return listaGrupo;

o tipo de dados da coluna cd_empresa_grsoc é char e o setcodigo é int...o que devo fazer?

12 Respostas

D

Rodrigomazza:

o tipo de dados da coluna cd_empresa_grsoc é char e o setcodigo é int…o que devo fazer?

Tem mesmo certeza que perguntou isso?
Obtenha o valor como String e faça o parse para Integer…

D

Um detalhe: Essa consulta está assim mesmo?

sql = "select cd_empresa_grsoc,upper(nm_fantasia_empresa)nm_fantasia_empresa from tbod_empresa where cd_empresa in ("+ select distinct cd_empresa_grsoc from tbod_empresa) order by cd_empresa_grsoc ";
Roda?

D

Outro detalhe, aqui a exceção se refere à linha 161. O que tem nesta linha?

at br.com.odontoprev.implantacao.DAO.GrupoDAO.listarGrupo(GrupoDAO.java:161)

R

kkkkkkk

por incrivel que parece, sim roda...

então tentei fazer um parse int mas olha o que acontece:

while (rs.next()) {
				Parametro p = new Parametro();
				p.setCodigo(rs.getInt(Integer.parseInt("cd_empresa_grsoc")));
				p.setDescricao(rs.getString("cd_empresa_grsoc")+'-'+rs.getString("nm_fantasia_empresa"));
				listaGrupo.add(p);
			}

olha o erro que estora:

java.lang.NumberFormatException: For input string: "cd_empresa_grsoc"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at br.com.odontoprev.implantacao.DAO.GrupoDAO.listarGrupo(GrupoDAO.java:161)
	at br.com.odontoprev.implantacao.bo.GerenciadorGrupo.listarGrupo(GerenciadorGrupo.java:10)
	at br.com.odontoprev.implantacao.actions.ClienteAction.abrirCliente(ClienteAction.java:80)
	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 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
	at br.com.odontoprev.implantacao.actions.MainAction.execute(MainAction.java:23)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:480)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:502)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
	at java.lang.Thread.run(Unknown Source)

Vc deve ter reparado que ele cria um objeto p = new parametro da uma olhada:

public class Parametro {
	public Parametro() { super(); }
	protected int  cd_parametro;
	protected int cd_outro;
	protected String  ds_parametro;
	protected String ds_outro;
	protected double vl;
	
	 
	public double getVl() {
		return vl;
	}
	public void setVl(double vl) {
		this.vl = vl;
	}
	public void setCdOutro(int n){
		cd_outro = n;
	}
	public void setDsOutro(String n){
		ds_outro = n;
	}
	public void setCodigo(int n) {
		cd_parametro = n;
	}
	public void setDescricao(String a) {
		ds_parametro = a;
		if (ds_parametro != "" || ds_parametro != null) {
			ds_parametro = ds_parametro.toUpperCase();	
		}
		
	}
	public int getCodigo(){
		return cd_parametro;
	}
	public int getOutro(){
		return cd_parametro;
	}
	public String getDescricao(){
		return ds_parametro;
	}
	public String getDsOutro(){
		return ds_outro;
	}
}
D

Rodrigomazza:
kkkkkkk

por incrivel que parece, sim roda…

então tentei fazer um parse int mas olha o que acontece:

while (rs.next()) { Parametro p = new Parametro(); p.setCodigo(rs.getInt(Integer.parseInt("cd_empresa_grsoc"))); p.setDescricao(rs.getString("cd_empresa_grsoc")+'-'+rs.getString("nm_fantasia_empresa")); listaGrupo.add(p); }


As coisas dão errado quando alguém faz algo errado.
Releia o que eu escrevi, com atenção e siga os passos um a um.

R

Opa desculpe…

vc disse para eu fazer isso?

Parametro p = new Parametro();
				String parse = rs.getString("cd_empresa_grsoc");
				p.setCodigo(Integer.parseInt(parse));
				p.setDescricao(rs.getString("cd_empresa_grsoc")+'-'+rs.getString("nm_fantasia_empresa"));
				listaGrupo.add(p);
D

Sim.
Isso deve ter funcionado, a não ser que, o conteúdo existente na coluna cd_empresa_grsoc seja diferente de um número.

R

Então agora esta dando erro em um item especifico do quando:

GRAVE: Servlet.service() for servlet action threw exception
java.lang.NumberFormatException: For input string: "45747 "
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at br.com.odontoprev.implantacao.DAO.GrupoDAO.listarGrupo(GrupoDAO.java:162)
	at br.com.odontoprev.implantacao.bo.GerenciadorGrupo.listarGrupo(GerenciadorGrupo.java:10)
	at br.com.odontoprev.implantacao.actions.ClienteAction.abrirCliente(ClienteAction.java:80)
	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 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
	at br.com.odontoprev.implantacao.actions.MainAction.execute(MainAction.java:23)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:480)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:502)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
	at java.lang.Thread.run(Unknown Source)

eu acessei o banco e não sei se pode ser isso mas este dado esta com espaço apos o ultimo digito…

D

A classe String permite que você elimine espaços desnecessários utilizando o método trim().
Talvez

Integer.parseInt(parse.trim());

Resolva…

R

foi o que fiz…mas usei o trim no select.

obrigado pela paciencia…

D

Ah, entendi.
É que não sei se todo banco de dados suporta trim, por isso sugiro deixar a cargo de quem conheço, no caso, java.

Engraçado você agradecer a paciência. O pessoal normalmente reclama que eu sou boçal e tals.
Como você mostrou boa vontade e humildade, eu segui como achei que deveria. O mérito é teu, afinal, ninguém nasce sabendo e, perguntar, é fundamental.

E

Rodrigomazza:
foi o que fiz…mas usei o trim no select.

obrigado pela paciencia…

Rodrigomazza, não fique com receio de perguntar…

Criado 17 de agosto de 2012
Ultima resposta 6 de ago. de 2014
Respostas 12
Participantes 3