Operações jdbc[RESOLVIDO]

5 respostas
Viniciustelles

Bom dia, estou tendo problemas para inserir no banco oracle.

minha classe de conexão ->

public class ConnectionFactory {

    public static Connection getConnection() {
        try {
            Class.forName("oracle.jdbc.OracleDriver");
            Connection con;
            con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "vinicius", "vinicius");
            System.out.println("Conctado");
            return con;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("nao carrego driver");
            return null;
        } catch (SQLException e) {
            System.out.println("nao conecto");
        }
        return null;
    }

e este é meu método de teste para inserir ->

public void testeInsere(){
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement ps = null;
        
        String sql = "INSERT INTO TESTE(ID,NOME) VALUES(1,'TESTE');";
        try {
            ps = con.prepareStatement(sql);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            ConnectionFactory.close(ps, con);
        }
    }

minha saída no console é esta ->

Conctado
java.sql.SQLException: ORA-00911: caractere inválido

	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:753)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:218)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:971)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1191)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3414)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3498)
	at br.com.jdbc.dao.ConnectionFactory.testeInsere(ConnectionFactory.java:59)
	at br.com.jdbc.dao.ConnectionFactory.main(ConnectionFactory.java:70)
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Bom a principio o erro é simples a nível de banco caractere inválido. Mas não é exatamente este erro que esta ocorrendo como podem perceber eu consigo me conectar e ele me retorna um provável erro ORA-00911: caractere inválido.
Encontrei algumas resposta na internet referente a este erro dizendo que provavelmente é a versão do meu JDK(1.6) que é incompatível com o diver jdbc que estou usando que não deixa eu fazer estas operações executeUpdate(); execute(); etc... pois como devem ter percebido consigo me conectar perfeitamente, apenas não consigo fazer inserts, update e delete...

o erro acontece nesse momento
ps.executeUpdate();

Se alguém conseguir me ajudar a encontrar uma solução o quanto antes muito obrigado att.

5 Respostas

Yago_Ernandes

Nessa parte:

ps.executeUpdate();

Coloque:

ps.executeUpdate(sql);

Você não passou o comando sql como parâmetro do executeUpdate, ele não esta fazendo nada ai, só ta servindo pra dar erro

Viniciustelles

sem sucesso.

nel

Remova o ‘;’ da String, ao final, deixando assim:

String sql = "INSERT INTO TESTE(ID,NOME) VALUES(1,'TESTE')";

E procure usar o PreparedStatement para setar esse tipo de valor para você, ao invés de adicionar ‘na mão’.

Yago_Ernandes

Tem certeza?? Eu só vejo esse erro ai, se não conseguir tente da seguinte forma:

public void testeInsere(){  
        
        Statement ps = null;  
          
        String sql = "INSERT INTO TESTE(ID,NOME) VALUES(1,'TESTE')";  
        try {  
            ps = con.createStatement();  
            ps.executeUpdate(sql);  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }finally{  
            con.close  
        }  
    }
Viniciustelles

Obrigado nel, [RESOLVIDO]

obs: para não ocorrer o erro, para conectar com oracle 10g use jdk(1.6)

Att.

Criado 16 de agosto de 2012
Ultima resposta 16 de ago. de 2012
Respostas 5
Participantes 3