[RESOLVIDO] Erro ao fazer insert (Mysql) através do Netbeans

Boa tarde, estou encontrando certa dificuldade em inserir os dados através da minha aplicação java aplicação . O erro diz que a minha sintaxe SQL está errada, porém já testei a mesmo pelo CommandLine e deu certo, não sei mais onde procurar erro, se alguém puder ajudar.

Método de inserção:

try {
String sql = “INSERT INTO colaborador VALUES(?,?,?,?,?,SELECT CURRENT_DATE(),?)”;
con = conexao.conectar();
PreparedStatement ps;
ps = con.prepareStatement(sql);
ps.setInt(1, Integer.parseInt(jTextField1.getText()));
ps.setString(2, jTextField2.getText());
ps.setString(3, jTextField3.getText());
ps.setString(4, jTextField4.getText());
ps.setInt(5, 0);
//ps.setObject(6, “(SELECT CURRENT_DATE())”);
if (jComboBox1.getSelectedIndex() == 0) {
ps.setString(6, “M”);
} else {
ps.setString(6, “F”);
}
//stm = con.createStatement();
stm.executeUpdate(sql);
} catch (SQLException e) {
System.out.println("Erro: " + e.getMessage());
}

Tela:

Estrutura tabela:

Inserção com mesma sintaxe pelo CommandLine:

Erro Netbeans: Erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘?,?,?,?,?,SELECT CURRENT_DATE(),?)’ at line 1

Se alguem puder ajudar agradeço!

Faz o seguinte teste. Coloca um break point na linha abaixo. E como aparentemente você está usando NetBeans, basta você selecionar apenas o “stm” que ele vai mostrar a string sql que vai executar. Daí você copia e cola no console do mysql para ver o que está errado.

Obs: Na instrução que você executou no console, a instrução SELECT CURRENT_DATE() está entre parênteses, já na sua string sql não. Não seria esse o problema?

Nota: Você pode inserir uma data da seguinte maneira também.

ps.setDate(0, new java.sql.Date(new Date().getTime()));

Estou usando NetBeans sim Matheus. Não está entre parentes na String, por que já tentei passar pelo console (com e sem parentes), ou seja ela preenche no lugar do ‘?’, pensei que poderia estar fornenencendo alguma informação que prejudicasse a sintaxe SQL (ps.setDate, ps.setObject já tentei os dois também) pensando que talvez esse poderia ser o erro, resolvi colocar diretamente na String o próprio código SQL (SELECT CURRENT_DATE()), e no no comando coloquei como comentário (//), somente para executar testes.

Fiz os teste que você sugeriu, o comando SQL esta totalmente igual ao do console (no console da certo, porem na aplicação não):

Olha o meu código de inserção como está, já tentei mudar os Statement, prepare Statement e etc. Mas até agora sem sucesso.

Posta todo o stack trace. Ta estranho mesmo viu.

To achando muito estranho também.
Erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘?,?,?,?,?,?,?)’ at line 1

Stacktrace:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘?,?,?,?,?,?,?)’ at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2788)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1816)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1730)
at main.colaborador.jButton1ActionPerformed(colaborador.java:473)
at main.colaborador.access$1600(colaborador.java:23)
at main.colaborador$15.actionPerformed(colaborador.java:216)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
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:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
CONSTRUÍDO COM SUCESSO (tempo total: 21 segundos)

CONSTRUÍDO COM SUCESSO (tempo total: 21 segundos)

Imagem do stacktrace, para melhor visualização:

Link do projeto, juntamento com o backup do banco de dados, caso necessite para melhor análise, grato pela atenção.

https://drive.google.com/folderview?id=0B7vUN-YwIlsaa3U0QjNlOTlsVXM&usp=sharing

Creio que enviou versão errada do projeto. Pois há código somente na classe de conexão com o banco e alguns frames vazios.

Desculpa o equivoco cara amigo, agora que percebi que antes do upload ser concluído eu compartilhei as parte, pode ser que por isso não ficaram disponíveis todos os arquivos. Verifique novamente se possivel:
https://drive.google.com/folderview?id=0B7vUN-YwIlsaM2dTOENEYkQ3eDQ&usp=sharing

Erro aqui.
ps.executeUpdate(sql);

Correto.
ps.executeUpdate();

Fazendo isto o PreparedStatement irá executar a instrução que você está passando no método executeUpdate(“Sua instrução”). E não há que você passou no momento da instanciação e parametrização.

Erro bobo que passa despercebido aos olhos.

1 curtida

Realmente meu brother, a gente imagina tanta coisa complexa que esses erros simples acabam passando despercebidos. Muito grato pela sua atenção! Ajudou bastante!

1 curtida