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!!
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
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??
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
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!!!
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á 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