Duvidas PreparedStatements

11 respostas
rafael.pierre

E ai galera…

Eu tava começando a fazer um sistema q utiliza base de dados MySQL com os statements normais, isto é, meu código possuía código SQL misturado. Resolvi mudar isso usando PreparedStatements e um QueryManager, do exemplo mostrado no tutorial do GUJ.

Não sei o que estou fazendo de errado, mas na hora de inserir dados no banco ele simplesmente não faz nada… Dêem uma olhada no codigo

public void insere() {
       QueryManager manager = QueryManager.getQueryManager();
       try {
 	// cria um preparedStatement
 	java.sql.PreparedStatement stmt = manager.getPreparedStatement(principal.get_conexao(), "equip.insert");
 
 	// preenche os valores
 	stmt.setString(1, NomeEquip1.getText());
        
        NovoEquipStatus.setText("Equipamento inserido com sucesso!");
 
 	// executa
 	stmt.execute();
 	stmt.close();
 
 	System.out.println("Gravado!");
 

       } catch (java.sql.SQLException e) {e.printStackTrace();}

Alguma sugestao?

11 Respostas

esb

A não ser que seu sistema esteja com auto-commit, faltou um commit ai não? Se não for isso, poste o código completo pra gente, incluindo os INSERTs :wink:

maquiavelbona

Leia a documentação da classe. :?

Além do commit final.

Até!

analyser

Cara esta apostila pode te ajdudar

Falow

rafael.pierre

Galera valeu pela resposta… ja to dando uma lida na documentacao e ta sendo muito util. Mas enquanto isso, por favor, tirem uma duvida minha:

  • No QueryManager, estou lendo um arquivo sql.txt que contém o seguinte:
equip.insert=insert into equip values (0, ?)
  • Quando crio o PreparedStatement:
java.sql.PreparedStatement stmt = manager.getPreparedStatement(principal.get_conexao(), "equip.insert");

Tá certo isso? To desconfiando de que ele não está achando o equip.insert no arquivo de texto…

esb

rafael.pierre,

Tenta debuggar o QueryManager para ver se ele está carregando suas queries corretamente!

[]'s!

Zeed01

Desculpe pela ignorancia… mas não conheco esse QueryManager, é uma classe sua ?

Se for, o que ela faz ?
Qual o código ?

esb

Zeed01:
Desculpe pela ignorancia… mas não conheco esse QueryManager, é uma classe sua ?

Se for, o que ela faz ?
Qual o código ?

Ele pegou neste tutorial do GUJ:
http://www.guj.com.br/java.tutorial.artigo.115.1.guj

:smiley:

rafael.pierre

Isso mesmo.

Ta dando certo agora.

Era um problema com stmt.execute()

Troquei por stmt.executeUpdate()

Tinha algumas restrições erradas na tabela que eu estava inserindo tb… Mas agora ta tudo funcionando.

Vlw galera, abraços

rafael.pierre

:smiley:

Galera, desculpa encher de novo, mas agora estou tentando contar o numero de linhas da minha tabela e passar para uma JTextField

Fiz o seguinte:

QueryManager manager = QueryManager.getQueryManager();
        try {
           java.sql.PreparedStatement ps = manager.getPreparedStatement(principal.get_conexao(), "equip.conta");
           java.sql.ResultSet rs = ps.executeQuery();
           String conta = rs.getString(0); //indice da coluna "COUNT(*)"
           CodEquip1.setText(conta);
           
        } catch (java.sql.SQLException e) {
            System.out.println("Erro SQL:\n");
            e.printStackTrace();
        }

No arquivo “scripts.txt”, adicionei a linha:

equip.conta=SELECT COUNT(*) FROM equip

Até ai, tudo bem. Mas olha só o erro que obtive:

java.sql.SQLException: Before start of result set

at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:666)

Erro SQL:

at com.mysql.jdbc.ResultSet.getNativeString(ResultSet.java:3942)
at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5080)
    at com.mysql.jdbc.ResultSet.getString(ResultSet.java:4926)
    at sigma2.NovoEquip.<init>(NovoEquip.java:27)
    at sigma2.Principal.NovoEquipItemActionPerformed(Principal.java:114)
    at sigma2.Principal.access$200(Principal.java:13)
    at sigma2.Principal$3.actionPerformed(Principal.java:71)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1216)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1257)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
maquiavelbona

Iniciaste o “ponteiro” do ResultSet? Quando você executa a query, ele retorna o ResultSet com o “ponteiro” em null, para começar a ler tens que ler o próximo registro. Portanto o método ResultSet.next() deve ser usado.

Até!

rafael.pierre

maquiavel, era isso mesmo! :slight_smile:

valeu!

Criado 13 de julho de 2007
Ultima resposta 13 de jul. de 2007
Respostas 11
Participantes 5