JRE.......nao funciona

33 respostas
R

Ola a todos…

jah postei esse problema aqui…mas o incrivel eh q realmente nao acho uma solucao…

fiz meu sistema usando JDK 1.3.1_02…qdo fui porta-lo p/ outras maquinas, instalei o JRE 1.3.1_02…mas o curioso eh q nao funcionou corretamente…o sistema trata datas incorretamente, alem de nao gravar no banco (ocorre excecao dizendo q achou uma letra onde deveria ser numero, ou seja, nao consegue converter de string p/ int)…

entao, peguei 2 JREs diferentes…JRE 1.3.1_01 e JRE 1.3.1_03…mas com nenhuma delas funcionou…

meu sistema soh funciona normal se instalar o JDK…mas isso nao eh viavel, certo?? senao qual a vantagem do JRE??

o q posso fazer p/ corrigir esse problema??
por favor, tenho um pouco de urgencia nisso…

ate mais.

33 Respostas

Rafael_Steil

Coloque aqui a linha de codigo onde esta dando o erro com a exception ( a linha que da a exception de converter, por exemplo ). Como ja tinha sido dito, nao pode dar problemas mesmo.

Qual o SO que vc esta usando?

Rafael

R

uso o Win2000 aqui nas maquinas…algumas ainda tem o Win98…

nao tem como saber a linha de erro ao converter…pois se eu colocar o jdk p/ debugar o sistema, nao darah mais erros…

o problema eh com o Integer.parseInt()

Rafael_Steil

Ok, mas vc sabe qual a linha da o erro, neh? pq a exception diz onde ele ocorreu. Eh esta linha que queria que voce colocasse aki.

Rafael

R

cara, nao tem segredo…

a JRE nao estah conseguindo fazer uma simples conversao de String p/ int…
o q, particularmente, eu acho um absurdo!!!

Rafael_Steil

Voce compilou com alguma opcao a mais, fez algo especial? em todos os lugares ( estacoes ) da problema com a aplicacao quando esta rodando via jre? Os testes que voce faz com um e outro sao exatamente o mesmos?

Rafael

R

mesmos erros nas maquinas…

nao dah p/ fazer mto teste pq ele nem grava no BD…

Rafael_Steil

Assim, se soh esta dando problema em alguma coisa especifica, eu chutaria a possibildiade de ter problema com o teu codigo. Agora, de da pau em tudo ( por exemplo, nada funciona ), entao a coisa eh mais critica…

voce ja tentou baixar o JRE novamente, tentou com relases diferntes?

Rafael

R

jah tentei usar 3 JREs diferentes…nada muda…

nao estou usando nada especifico…apenas funcoes rotineiras do JAVA…

Paulo_Silveira

rbaroni, com certeza o erro esta no seu codigo
nao tem essa da JRE estar com problemas no Integer.parseInt()
eh voce que com certeza esta mandando uma string q contem caracteres para ele, ao inves de apenas numeros.

Pode parecer que nao a primeira vista, mas essa eh a reacao qdo vamos ver o nosso codigo, de que ele esta certo. Essa eh a certeza que nunca podemos ter: que nosso codigo esta certo.

Coloque um trecho do codigo pra gente.

R

caro Paulo…

o problema nao eh meu codigo…tenho certeza…
se fosse, ele nao funcionaria nunca…

mas ele soh funciona com o jdk instalado…apenas o jre nao serve p/ funcionar…e eh exatamente isso q pretendo descobrir…

mas pode descartar problemas no codigo…

Paulo_Silveira

rafael
me mande o codigo fonte por email
ou ponha aqui mesmo

ou pelo menos a excecao q esta sendo lancada
o melhor era o codigo fonte mesmo
no minimo da classe

R

como disse antes…
ele nao estah conseguindo fazer a conversao…

o banco diz q encontrou um valor nao numerico onde um numerico era esperado…

mas pode ter certeza…o parametro estah certo…senao estivesse, nao funcionaria de jeito nenhum…

Paulo_Silveira

bem
creio que assim a gente nao pode te ajudar, pq fica faltando detalhes

ms se eh o BANCO que esta reclamando, o seu problema eh com o BANCO ou com o DRIVER JDBC, e de maneira ALGUMA com o jre

R

bom, pensei no JDBC…

o jdk 1.3.1 vem com o driver na versao 2.0…
agora nao sei com qual driver vem a jre 1.3.1…

mas insisto q as funcoes de banco (se for mesmo isso), sao funcoes basicas e acredito q jah existiam na versao 1.0 do JDBC…

Rafael_Steil

Bom, acho que nao custa nada voce tentar mudar alguma coisa, talvez usar algum outro metodo para pegar o valor ( por exemplo, usar getObject ao inves de getInt ) e ver no que da…
a unica saida eh comecar a apelar, pois a maior parte das vezes o erro esta na coisa mais basica, e por essa razao achamos que nunca estaria ali.

Rafael

Paulo_Silveira

eu vi que voce postou o problema no forum da sun

e as respsotas sao exatamente as mesmas que a gente deu

http://forum.java.sun.com/thread.jsp?forum=31&thread=346240

o seu problema NAO esta no java. esta ou no banco (ou driver), ou no seu codigo

quando o pessoal te perguntou qual o driver, eles querem saber o driver do vendor, isso eh, oracle1.2 ou algo assim, e nao com qual JDBC ele eh compativel

manda a stacktrace pra gente e pra eles tambem!

R

Paulo…
vou mandar a stachtrace…assim q eu decobrir como consegui-la…

ainda nao mexi com stacktrace…
se puder me falar como a vejo…

valew.

Rafael_Steil

Existe o metodo printStackTrace().

..
catch (AlgumaException e) {
     e.printStackTrace();
}

Rafael

R

bom galera…

o erro persiste…ele continua dizendo q encontra uma string onde deveria ser inteiro…

caso duvidem de mim, facam o teste…facam um cadastrinho simples no banco e rodem apenas com a jre…

falow

Rafael_Steil

Ok, fiz este programa:

import java.sql.*;

public class MysqlTest
{
	public static void main(String args[])
	{
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.0.222:3308/admin_novo?user=root&password=root");
			Statement s = conn.createStatement();
			String sql = "SELECT nome, idade FROM teste";
			ResultSet rs = s.executeQuery(sql);

			while (rs.next()) 
				System.out.println("Nome: "+ rs.getString("nome") +" - Idade: "+ rs.getInt("idade"));			

			rs.close();
			s.close();
			conn.close();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Compilei com o SDK da IBM e rodei com a JRE 1.4.1_01 da Sun. Funcionou perfeitamente.

Rafael

R

Rafael…

as consultas aqui tb funcionam…o q dah erro eh na insercao…

estou tentando debugar meu programa…leva um certo tempo, pois tenho q remover o jdk, roda-lo, instalar de novo e mexer nele…

se achar algum erro, posto aqui…

Rafael_Steil

Cara, poste a stack trace aqui, nao custa nada… coloque ela e uma parte do codigo que ta dando pau…

A maior parte dos bugs sao gerados por erros de programacao basicos, coisas que sao as ultimas em que pensamos…

Rafael

R

consegui mostrar o erro…

ai vai…

java.sql.SQLException: ORA-01858: a non-numeric character was found where a numeric was expected

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1405)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:822
)

at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.ja

va:1446)

at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.jav

a:1371)

at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStateme

nt.java:1900)

at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePrepar

edStatement.java:363)

at clsCargo.insere(clsCargo.java:514)

at frmCadCargo.registraDados(frmCadCargo.java:462)

at frmCadCargo.access$100(frmCadCargo.java:29)

at frmCadCargo$4.actionPerformed(frmCadCargo.java:261)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknow

n Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour

ce)

at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

conversei com a turma do suporte aqui e me disseram q pode ser a falta do client do oracle na maquina…
sera??

se for, como posso fazer´p/ q ao instalar o sistema, ele jah crie a ODBC do banco??

Paulo_Silveira

o erro esta com CERTEZA no banco de dados, ou tem uma string num campo era era number only, ou entao o JDBC pensa que eh assim mas nao eh. de qualquer maneira, ou esta nod river do JDBC ou no servidor.

outra coisa que tenho CERTEZA: NAO eh a falta do clietne oracle no seu micro. se for, algo esta muito errado, pq o java se conecta ao oracle APENAS pelo driver, sem cliente nenhum, mas faca o teste.

o problema AINDA esta no seu codigo

como alguem disse la no forum, deve ser, mto provavelmente, isso aqui

recordSet.getInt("meu_campo");

soh que esse seu campo, ACEITA string, e voce ta pegando como INTEIRO, mas alguem inseriu la uma linha com um string

ou entao, se o problema eh na insercao, voce esta colocando uma string num campo q eh integer

se voce colocar o trecho do codigo, vai ficar MIL vezes mais facil.

R

ai vai o codigo…
nao tem erro…eh soh cod. e descricao…o codigo eh gerado automatico…e a descricao o usuario digita…nao tem como dar erro…

public boolean insere()
{
        boolean bolInserido;
        PreparedStatement pstmt;

        //inicializando as variáveis de controle
        intNoTent = 0;
        bolInserido = false;
        
        try
        {
                  //obtêm a conexão com o banco de dados
                 conSCP = clsConexao.obterConexaoNativaORCL();
                 //obtêm a chave do próximo Cargo a ser inserido
                 intChCarg = proximo();
            
                 while (intNoTent <= 100 && !bolInserido)
                 {
                           intNoTent++;
		
                          strSQL = "INSERT INTO " + getTName() + " (" + 
                                        getTFName("ChCarg") + ", " + getTFName ("Descricao") + ", " + getTFName("TimeStamp") + ", " + getTFName("NomeUsuario") + " )" + " VALUES (?,?,TO_DATE(?, 'DD/MM/YYYY HH24:MI:SS'),?)";

                         pstmt = conSCP.prepareStatement(strSQL);
                         pstmt.clearParameters();
                         //armazena o LOGIN do usuario logado
                         strNomeUsuario = strProfLogado;
                         //retorna a data atual do servidor
                         strTimeStamp = formataDataHora(DesenvProg.retornaDataSistema());
                        //parametros da SQL   
                        pstmt.setInt(1,intChCarg);
                        pstmt.setString(2,strDescricao);
                        pstmt.setString(3,strTimeStamp);
                        pstmt.setString(4,strNomeUsuario);

                        /*
                         * se sucesso(retornar o número de linhas afetadas 
                         * maior que zero) setar true para a variável de controle
                         */
                        if (pstmt.executeUpdate()>0)
                                bolInserido = true;
                        pstmt.close();
	}
               //se não conseguir inserir o registro exibir mensagem de erro 	if (!bolInserido)
                         //Registro não pôde ser Cadastrado!
                         strMensagemErro = Idioma.buscaMensagem(42);
       }
       catch(SQLException excBanco)
      {
               excBanco.printStackTrace();
               //Ocorreu um erro fora do escopo de tratamento do programa.
               strMensagemErro = Idioma.buscaMensagem(46) + "
" + "insere: " + excBanco.toString();
      }
      //retorna o resultado do INSERT
      return bolInserido;
}

o metodo proximo() retorna um inteiro com o numero do registro a ser gravado…

se vcs entenderem o codigo… :lol:

Bani

Você também pode ir na linha 514 do tal clsCargo e colocar um System.out.println do INSERT que ele está tentando fazer uma linha antes de executá-lo (isso se você tiver como pegar os resultados do System.out em algum lugar.)
Aí pegue esse INSERT e tente executá-lo diretamente no SQLPlus
Provavelmente ele vai indicar em qual coluna está o problema.

R

como disse…estah tudo certo com os dados a serem inseridos…
ai vao eles…

SQL:
INSERT INTO Cargo (int_Carg_ChCarg_PK, str_Carg_Descricao, dt_Carg_TimeStamp, str_Carg_NomeUsuario ) VALUES (?,?,TO_DATE(?, ‘DD/MM/YYYY HH24:MI:SS’),?)

codigo = 1997
descricao = TESTEGUJ
timestamp = Jan 16, 2003 5:05:39 PM
nomeusuario = admin

R

Ola a todos…
aqui vou eu de novo com minha guerra com o JRE…

percebi q meu metodo q formata a data/hora tem retornos diferentes…

com JRE ele retorna:
17/01/2003 01:17:48PM
com JDK ele retorna:
17/01/2003 13:17:48

seria esse o problema de nao gravar no banco, mesmo eu usando a clausula to_date e informando o formato a ser gravado no banco na minha SQL???

Bani

Provavelmente.
Se no seu insert você tem “TO_DATE(?, ‘DD/MM/YYYY HH24:MI:SS’)” e o formato no JRE fica um 48PM, esse “SS” não está está recebendo um valor correspondente esperado.

Rafael_Steil

Bom, talvez o problema seja nos arquivos .properties ( agora, nao sei se esse tipo de configuracao existe em algum deles ). Por exemplo, o xxx.properties do JDK tem a propriedade Y com o valor K, porem o xxx.properties do JRE tem Y com o valor L, por exemplo…

Ou Alguma coisa assim… ( nao tem como configurar os am/pm ou a falta deles via codigo?? voce poderia fazer explicitamente assim )

Rafael

D

rbaroni,

Você não pode colocar um pedaço do código ou da exceção no fórum? É isso?
Porque se você colocasse, poderia ter uma ajuda mais clara e melhor.
Sem o código ou alguma outra coisa que ajude a detectar melhor o problema, só apareceram suposições… (poderiam ser soluções). A galera não vai conseguir te ajudar do jeito que você espera…

[]s

Rafael_Steil

Ele colocou a exception num post anterior.

Rafael

D

Noossa…
Desculpem, não ví a página que ele colocou a excessão. :oops:

Criado 15 de janeiro de 2003
Ultima resposta 17 de jan. de 2003
Respostas 33
Participantes 5