Ao fazer o insert dá o erro Invalid cursor state!

6 respostas
D

Estou rodando meu programinha para fazer uma insert de uma tabela para outra, quando ele insere o primeiro registro ele gera uma execptoin

Falha no SQL, Verifique o ODBC ou o nome do campo que estß sendo selecionado
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0115E Invalid cursor state.
SQLSTATE=24000

O que pode estar havendo!!

Eis um pedaço do código!!

Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
Connection conn = DriverManager.getConnection(url, username, password);
System.out.println("Conexão efetuada com sucesso, aguarde !!!");
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT * FROM DDD_TAB_US");

while(rs.next()) 
	{
	String codbrick = rs.getString("COD_BRICK");
	String codproduto = rs.getString("COD_PRODUTO");
       	String codclasse = rs.getString("COD_CLASSE");
       	String codlab = rs.getString("COD_LAB");
       	String data = null;
	double valor = 0;
	if(!codproduto.equals("")) 
    			{	
    			data = "09/2002";
       			valor = rs.getDouble("VALOR24");
       			stmt.executeQuery("INSERT INTO TESTE_FATO1(ID_EMPRESAS,ID_CLASSE,DATA,ID_BRICKS,ID_PRODUTO,VENDA_EM_VOLUME) VALUES('"+codlab+"','"+codclasse+"','"+data+"','"+codbrick+"','"+codproduto+"',"+valor+")");
    			}
}
rs.close();
stmt.close();
conn.close();
log.close();
txt.close();
}
catch
..

O que posso estar fazendo de errado!! Inicialmente deixei minha tabela de destino sem chave primária, só pra teste, mas mesmo assim não adiantou!!

6 Respostas

massardi

Bom vejamos pode ser possivel que vc esteja querendo fazer o seu cursor voltar na sua consulta, sem especificar seu cursor e definido como TYPE_FORWARD_ONLY, mas por outro lado tente substituir a linha:
stmt.executeQuery(“INSERT INTO TESTE_FATO1(ID_EMPRESAS,ID_CLASSE,DATA,ID_BRICKS,ID_PRODUTO,VENDA_EM_VOLUME) VALUES(’”+codlab+"’,’"+codclasse+"’,’"+data+"’,’"+codbrick+"’,’"+codproduto+"’,"+valor+")");
pela mesma so que ao inves de stmt.executeQuery, troque para smtp.executeUpdate…
OK

D

Olá Massardi, bem fiz a modificação mas ele inseriu o primeiro registro e depois deu o mesmo erro:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0115E Invalid cursor state.
SQLSTATE=24000
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0115E Invalid cursor state.
SQLSTATE=24000 at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:241) at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:186) at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(SQLExceptionGenerator.java:419) at COM.ibm.db2.jdbc.app.DB2ResultSet.next(DB2ResultSet.java:444) at importar_tabela2.main(importar_tabela2.java:30)

O que pode ser??

D

Utilize o método “executeUpdate(String query);”
Esse método é específico para insert, update e delete. O método que você está usando (executeQuery) é utilizado para instruções select.

Na API J2SDK 1.4.0 está descrito:

executeUpdate(String sql)
Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

[]s

D

Oi Diogo, beleza, seria isso?

stmt.executeUpdate(“INSERT INTO TESTE_FATO1(ID_EMPRESAS,ID_CLASSE,DATA,ID_BRICKS,ID_PRODUTO,VENDA_EM_VOLUME) VALUES(’”+codlab+"’,’"+codclasse+"’,’"+data+"’,’"+codbrick+"’,’"+codproduto+"’,"+valor+")");

Se for deu o mesmo erro!!!

massardi

Meu sabe qual e o erro???

olha so em smtp.executeUpdate(“string sql”)

Vejamos sua String “INSERT INTO TESTE_FATO1(ID_EMPRESAS,ID_CLASSE,DATA,ID_BRICKS,ID_PRODUTO,VENDA_EM_VOLUME) VALUES(’”+codlab+"’,’"+codclasse+"’,’"+data+"’,’"+codbrick+"’,’"+codproduto+"’,"+valor+")");

Tente tirar “INSERT INTO TESTE_FATO1(ID_EMPRESAS,ID_CLASSE,DATA,ID_BRICKS,ID_PRODUTO,VENDA_EM_VOLUME) VALUES(’”+codlab+"’,’"+codclasse+"’,’"+data+"’,’"+codbrick+"’,’"+codproduto+"’,"+valor+")"; o ultimo parente fica assim

ok

D

Dá erro na compilação se retirar o parenteses do final!!

Bem eu não estou entendendo uma coisa, vocês estão falando do smtp.executeUpdate(“string sql”), não é pra ficar assim:

smtp.executeUpdate(“INSERT INTO ddd_fato1(ID_EMPRESAS,ID_CLASSE,DATA,ID_BRICKS,ID_PRODUTO,VENDA_EM_VOLUME) VALUES(’”+codlab+"’,’"+codclasse+"’,’"+data+"’,’"+codbrick+"’,’"+codproduto+"’,"+valor+")");

ou eu não preciso chamar o smtp.executeUpdate(), basta chamar a string sql “INSERT INTO ddd_fato1(ID_EMPRESAS,ID_CLASSE,DATA,ID_BRICKS,ID_PRODUTO,VENDA_EM_VOLUME) VALUES(’”+codlab+"’,’"+codclasse+"’,’"+data+"’,’"+codbrick+"’,’"+codproduto+"’,"+valor+")";, se for isso ele dá erro na compilação!!

este erro :
not a statement

Criado 11 de novembro de 2002
Ultima resposta 12 de nov. de 2002
Respostas 6
Participantes 3