Erro ao gravar em banco dados

10 respostas Resolvido
J

Caros.

Estou com um erro quando executo o código para gravar no banco de dados Psotgre, mostra o erro abaixo,

Exception in thread “AWT-EventQueue-0” java.lang.RuntimeException: org.postgresql.util.PSQLException: ERRO: erro de sintaxe em ou próximo a "user"
Posição: 22

meu código:

String sqlInsere = insert into teste(id,user,senha)+values(?,?,?);

try {

Connection con=new ConnectionFactory().getConnection();
PreparedStatement stmt = con.prepareStatement(
                stmt.setInt(1,5);
                stmt.setString(2,"josue");
                stmt.setInt(3,321);
                System.out.println(sqlInsere);
                stmt.
}catch(SQLException e){
    throw new RuntimeException(e);
}

10 Respostas

J

Desculpem o código saiu errado

String sqlInsere = insert into teste(id,user,senha)+values(?,?,?);

try {

Connection con=new ConnectionFactory().getConnection();
PreparedStatement stmt = con.prepareStatement(sqlInsere);
                stmt.setInt(1,5);
               stmt.setString(2,"josue");
               stmt.setInt(3,321);
                System.out.println(sqlInsere);
                stmt.executeQuery();
                
                    
}catch(SQLException e){
    throw new RuntimeException(e);
}
J

Tente assim:

String sqlInsere = "insert into teste (id,user,senha) values (?,?,?)";

I

“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.”

“executeQuery(String sql) Executes the given SQL statement, which returns a single ResultSet object.”

https://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html

J

Tando desta forma como da outra retorna o mesmo erro.

J

Teste este método do Statement do código abaixo e dá certo.
Até mesmo se colocar a string já com os dados gravados funciona.
Mas sempre vejo a opção que implementei anteriormente nos docs e apostilas, mas comigo não funciona.

String sqlInsere=“Insert into teste values(?,?,?)”;

try {
                Connection con=new ConnectionFactory().getConnection();
            
                PreparedStatement stmt = con.prepareStatement(sqlInsere);
                stmt.setInt(1,iduser);
               stmt.setString(2,nomeuser);
               stmt.setInt(3,senhauser);
               
                stmt.execute();
          
                    
}catch(SQLException e){
    throw new RuntimeException(e);
}
E

Esse erro não estar tão claro, coloque assim :

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

Depois coloque toda a log do console aqui

J

veja que quando uso o primeiro código falha: com Preparedstatement
Quando uso o segunto só com o Statement funciona
abaixo erro como solicitado:

org.postgresql.util.PSQLException: ERRO: erro de sintaxe em ou próximo a "user"

Posição: 22

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182)

at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911)

at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:173)

at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:622)

at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:472)

at org.postgresql.jdbc.PgStatement.executeQuery(PgStatement.java:386)

at controlegastos.cadastrousuario.jButton1ActionPerformed(cadastrousuario.java:181)

at controlegastos.cadastrousuario.access$100(cadastrousuario.java:22)

at controlegastos.cadastrousuario$2.actionPerformed(cadastrousuario.java:68)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6505)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)

at java.awt.Component.processEvent(Component.java:6270)

at java.awt.Container.processEvent(Container.java:2229)

at java.awt.Component.dispatchEventImpl(Component.java:4861)

at java.awt.Container.dispatchEventImpl(Container.java:2287)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)

at java.awt.Container.dispatchEventImpl(Container.java:2273)

at java.awt.Window.dispatchEventImpl(Window.java:2713)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)

at java.awt.EventQueue.access$000(EventQueue.java:101)

at java.awt.EventQueue$3.run(EventQueue.java:666)

at java.awt.EventQueue$3.run(EventQueue.java:664)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)

at java.awt.EventQueue$4.run(EventQueue.java:680)

at java.awt.EventQueue$4.run(EventQueue.java:678)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
I

A exception é clara, se não funciona de um jeito ou de outro, é porque está fazendo algo de errado, e como a própria documentação diz, use a mesma :slight_smile:

E
Solucao aceita

Dei uma olhada nesse link [Link] (http://www.coderanch.com/t/301594/JDBC/databases/Difference-execute-executeQuery-executeUpdate), e vi que na primeira instrução você estar chamando o método errado.

executeQuery () — para obter os dados do banco de dados
executeUpdate () — para insert, update, delete
execute () - qualquer tipo de operações

O certo seria com o executeUpdate:

PreparedStatement stmt = con.prepareStatement(sqlInsere);
                stmt.setInt(1,5);
               stmt.setString(2,"josue");
               stmt.setInt(3,321);
                System.out.println(sqlInsere);
                stmt.executeUpdate();

Abraço

J

Caros.

Testei aqui e cheguei a conclusão que o String que funciona e esta:
String sqlInsere=“Insert into teste values(?,?,?)”;

teste a formas abaixo e as duas funcionam, inclusive usei a pesquisa(executeQuery), que também funcionou.
stmt.execute();
e com
stmt.executeUpdate().

Quanto à String abaixo, vou continuar pesquisando pra saber porque não funcionou, talvez seja com o Postgre.
String sqlInsere=“Insert into teste(id,user,senha) values(?,?,?)”;

Obrigado pela ajuda.

Criado 12 de fevereiro de 2016
Ultima resposta 16 de fev. de 2016
Respostas 10
Participantes 4