Erro - java.sql.SQLException: String SQL não é uma Consulta

Bom dia galera…
Madrugada boa pra desenvolver um códigos…rsrs
estou com um probleminha no meu código…Estou tentando cadastrar Cliente, quando clico para cadastrar, da erro no console…alguém poderia me dar uma dica…de onde eu procurar o erro nas classes…
pois já olhei minhas classes de cima pra baixo de baixo pra cima…

Tá ai o console de erro

Target URL -- http://10.0.0.3:8988/cadastro/view/CadastrarCliente.jsp 13/01/03 02:26:32 Oracle Containers for J2EE 10g (10.1.3.4.0) initialized 03/01/2013 02:26:36 oracle.wireless.its.ra.TelnetResourceAdapter run INFO: Versão do Industrial Telnet Server: Version 10.1.3.0.0 iniciada com sucesso. 13/01/03 02:26:48 java.sql.SQLException: String SQL não é uma Consulta 13/01/03 02:26:48 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138) 13/01/03 02:26:48 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:175) 13/01/03 02:26:48 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:240) 13/01/03 02:26:48 at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1142) 13/01/03 02:26:48 at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001) 13/01/03 02:26:48 at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3043) 13/01/03 02:26:48 at br.com.abaco.treinamento.java.noturno.cliente.dao.ClienteDao.cadastrarPessoa(ClienteDao.java:33) 13/01/03 02:26:48 at br.com.abaco.treinamento.java.noturno.cliente.be.ClienteBe.cadastrarCliente(ClienteBe.java:49) 13/01/03 02:26:48 at br.com.abaco.treinamento.java.noturno.cliente.servlet.CadastrarCliente.service(CadastrarCliente.java:44) 13/01/03 02:26:48 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) 13/01/03 02:26:48 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713) 13/01/03 02:26:48 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370) 13/01/03 02:26:48 at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871) 13/01/03 02:26:48 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453) 13/01/03 02:26:48 at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:221) 13/01/03 02:26:48 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:122) 13/01/03 02:26:48 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:111) 13/01/03 02:26:48 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260) 13/01/03 02:26:48 at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:234) 13/01/03 02:26:48 at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:29) 13/01/03 02:26:48 at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:879) 13/01/03 02:26:48 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303) 13/01/03 02:26:48 at java.lang.Thread.run(Thread.java:619)

Classe DAO

[code]public class ClienteDao
{
private Connection conexao = null;

public ClienteDao(Connection conexao)
{
	this.conexao = conexao;
}

public void cadastrarPessoa(ClienteVo clienteVo) throws SQLException
{
	PreparedStatement ps = null;
	String sql = "INSERT INTO TB_CLIENTE " +
					 "(CODIGO_CLIENTE, NOME_EMPRESA, NOME_PROPRIETARIO, CNPJ, BAIRRO, VALOR_CONTRATO) " +
					 "VALUES " +
					 "(?,?,?,?,?,?)";
	ps = conexao.prepareStatement(sql);
	
	ps.setLong		(1, gerarSequence("SEQUENCE_CLIENTE"));
	ps.setString	(2, clienteVo.getNomeEmpresaCliente());
	ps.setString	(3, clienteVo.getNomeProprietarioEmpresa());
	ps.setLong		(4, clienteVo.getCnpj());
	ps.setString	(5, clienteVo.getBairro());
	ps.setDouble	(6, clienteVo.getValorContrato());
	ps.executeQuery();
}

private long gerarSequence(String sequence) throws SQLException
{
	PreparedStatement ps = null;
	ResultSet rs = null;
	long codigo = 0;
	String sql = "SELECT " + sequence + ".NEXTVAL AS CODIGO FROM DUAL";
	ps = conexao.prepareStatement(sql);
	rs = ps.executeQuery();
	if(rs.next())
	{
		codigo = rs.getLong("CODIGO");
	}
		return codigo;
}

}[/code]

O ideal seria você colocar o código dentro de um bloco try e catch… de qualquer forma experimente mudar de

ps.executeQuery();

para

ps.execute();

Como o ppro11 comentou, se você utilizar:

ps.execute();

irá funcionar! Melhor ainda seria utilizar:

ps.executeUpdate();

Mas isso somente no seu método cadastrarPessoa!

Mas por que isto?
O método que você está tentando utilizar no método cadastrarPessoa o executeQuery(), como o nome já diz, é somente para query (consulta), ou seja, select! Ao utilizar este método ele retorna um ResultSet com o resultado da consulta.

O método executeUpdate(), que comentei acima, serve para atualizações (insert, update, delete) e ele retorna o número de linhas afetadas, isto é, se fizer um delete, por exemplo, ele retorna a quantidade de linhas afetadas, ou seja, a quantidade de linhas que foram “deletadas”. Com essa quantidade você pode validar se deu certo ou não sua operação, uma vez que vier 0 (zero), você deve verificar o porque.

O método que o ppro11 citou, o execute() serve tanto para consultas quanto para atualizações, porém se você realizar um select com ele, depois tem que utilizar o método getResultSet() para pegar o ResultSet com o resultado e se realizar uma atualização deve utilizar o método getUpdateCount() para pegar a quantidade de linhas afetadas.


Por esses motivos, prefiro utilizar o executeQuery() para consultas e o executeUpdate() para atulizações para que eu não necessite fazer um passo a mais chamado outros métodos para obter o resultado como ocorre com o execute(). 8)

Pelo que eu vi o problema está no SELECT do método que faz o auto incremento no Oracle… confesso ser pra mim meio desconfortável criar métodos em java para fazer tal ação…
Sugiro que o auto incremento seja de responsabilidade do Oracle fazer, segue exemplo:

Criar a sequence no Oracle;

CREATE SEQUENCE nome_da_tabela
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
NOCACHE
NOCYCLE;

Criar a Trigger para atribuir a sequence a sua Tabela;

CREATE OR REPLACE TRIGGER nome_da_sequence
  before INSERT ON nome_da_tabela
  FOR EACH row 
    BEGIN 
       IF inserting THEN 
           IF :NEW.coluna IS NULL THEN
                SELECT nome_da_tabela.nextval INTO :NEW.coluna FROM dual;
           END IF;
       END IF;
    END;

Assim eu acho que você evita de cometer erros ao escrever o método em Java para gerar a sequence…

Do resto, aparentemente, seu DAO está correto!