[RESOLVIDO] Erro em enviar uma String pro banco de dado qual será?

meu apliquei esse método aqui no ActionEvent do meu JButton:

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
java.sql.Connection con;
try {
    Class.forName("org.gjt.mm.mysql.Driver");
    con = java.sql.DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/fox","alexandref93","alex93");
} catch (Exception e){
    e.printStackTrace();
    throw new java.lang.RuntimeException("erro ao conectar");
}

String nome = this.NomeField.getText();
String telefone = this.TelefoneField.getText();
String rg = this.RGField.getText();
String cpf = this.CPFField.getText();
String comando = "insert into Cliente(nome, telefone, rg, cpf)" +
        "values"+"('"+nome+"','"+telefone+"','"+rg+"','"+cpf+"')";

try {
    java.sql.Statement stmt = con.createStatement();
    stmt.executeUpdate(comando);
    stmt.close();
    con.close();
    } catch (java.sql.SQLException e){
        throw new java.lang.RuntimeException(e.getMessage());
    }

try {
    con.close();
} catch (Exception e){
    e.printStackTrace();
    throw new java.lang.RuntimeException("erro fechar");
}
    }

criei o banco de dados, criei a tabela tudo certinho, só que ele não tah gravando as coisas no banco de dados, o que será???

Class.forName("org.gjt.mm.mysql.Driver");  

isso acima ta errado

Class.forName("com.mysql.jdbc.Driver");  

agora está certo ^^

[quote=andre.froes] Class.forName("org.gjt.mm.mysql.Driver");
isso acima ta errado

Class.forName("com.mysql.jdbc.Driver");  

agora está certo ^^
[/quote]

bem, arrumei isso que vc disse, mais o problema ainda permanece!!!

Bom dia,

Na linha 17, troca os '":

        "values"+"('"+nome+"','"+telefone+"','"+rg+"','"+cpf+"')";
[/code][code]
"(\""+nome+"\","+"\","+rg+"\","+"\","cpf+"\")";

Tenta assim. Na string, o " é equivalente, a usar ".

[]s

[quote=KaosBr]Bom dia,

Na linha 17, troca os '":

        "values"+"('"+nome+"','"+telefone+"','"+rg+"','"+cpf+"')";
[/code][code]
"(\""+nome+"\","+"\","+rg+"\","+"\","cpf+"\")";

Tenta assim. Na string, o " é equivalente, a usar ".

[]s[/quote]

mais dae piora, acusa de erro na linha que vc pediu pra trocar!!!

"(\""+nome+"\","+"\","+rg+"\","+"\","+cpf+"\")";

Estava faltando um sinal de +

[]s

[quote=KaosBr] "(\""+nome+"\","+"\","+rg+"\","+"\","+cpf+"\")";

Estava faltando um sinal de +

[]s[/quote]

bem, fiz como vc disse, mais mesmo o principal problema permanece!!!

O que será que fiz de errado???

Não estou vendo problemas, na forma que você digitou, as estruturas: para inserção e em como montou a sintaxe de SQL.

Verifica com break points, os valores que estão sendo passados para o banco, se de alguma forma não respeitam a estrutura da tabela. Ex:

  • Colunas de inteiro recebendo, caracteres especiais ou letras.

  • Colunas, recebendo valores maiores, do que o suportado. Ex: varchar(10), recebendo mais de, 10 caracteres.

A possibilidade de ser um problema, com a forma das variaveis, não estar adequada é a maior ou até mesmo vazio em um campo “NOT NULL”.

Desculpa em não poder ajudar mais. Verifica esses pontos, e qualquer coisa posta ae.

[]s

[quote=KaosBr]Não estou vendo problemas, na forma que você digitou, as estruturas: para inserção e em como montou a sintaxe de SQL.

Verifica com break points, os valores que estão sendo passados para o banco, se de alguma forma não respeitam a estrutura da tabela. Ex:

  • Colunas de inteiro recebendo, caracteres especiais ou letras.

  • Colunas, recebendo valores maiores, do que o suportado. Ex: varchar(10), recebendo mais de, 10 caracteres.

A possibilidade de ser um problema, com a forma das variaveis, não estar adequada é a maior ou até mesmo vazio em um campo “NOT NULL”.

Desculpa em não poder ajudar mais. Verifica esses pontos, depois posta o erro, pra gente.

[]s[/quote]

bem, eu tenho que aqui o MySQL 5.1 instalado certo, instalei o MySQL Workbench!!

criei um servidor pronto, depois criei um banco de dados com uma tabela “cliente” que possue “nome, telefone, rg, cpf”, bem como vc disse, em questão de caracteres especias, bem aqui no caso to escrevendo só letra mesmo, mais nada, e quantos a colunas recebendo valores maiores, eu deixo com “45”, e eu não passo de 45 dígitos,
não vejo o que fiz de errado no banco de dados!!!

Existe outros possiveis problemas??

VocÊ chegou a ver que valores as váriaveis estão, concatenando na variavel “comando”?

Depois de verificar as variaveis, executa o comando no terminal e posta a saida: O comando é: DESCRIBE nome_da_tabela;, ele informa os valores pros atributos da tabela.

[]s

pega a SQL e roda ele direito no banco e v se dá erro se naum der é a montagem do SQL no projeto q está com erro!

Ele deve estar te dando uma mensagem de erro. Diga qual é.

Você adicionou o driver do mysql no seu projeto?

Vamos melhorar um pouquinho esse código:

[code]private Connection criarConexao() throws SQLException {
Class.forName(“com.mysql.jdbc.Driver”);
return DriverManager.getConnection(“jdbc:mysql://localhost:3306/fox”,“alexandref93”,“alex93”);
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
Connection con = null;
PreparedStatement comando = null;
try{
con = criarConexao();
comando = con.prepareStatement(“INSERT INTO Cliente(nome, telefone, rg, cpf) VALUES (?, ?, ?, ?)”);
comando.setString(1, NomeField.getText());
comando.setString(2, TelefoneField.getText());
comando.setString(3, RGField.getText());
comando.setString(4, CPFField.getText());
comando.executeUpdate();
finally {
if (comando != null) comando.close();
if (con != null) con.close;
}
} catch (Exception e) {
throw new RuntimeException(“Erro ao inserir”, e);
}
}
[/code]

Se não funcionar, poste o StackTrace do erro. E não esqueça de dar um import java.sql.* no começo do seu arquivo.

Veja como é muito melhor usar o PreparedStatement. Não há a necessidade de usar aspas simples, ou concatenar nada com +. Fica bem mais claro o que está acontecendo.
Outras vantagens são que o próprio java se encarrega de converter o formato do dado para o que o banco aceita.
Por isso Strings não necessitam das aspas simples, e você nem precisa ficar formatando objetos do tipo Date.

Finalmente, o java também evita problemas caso houvesse uma aspas simples dentro da sua String. Já pensou o que aconteceria no seu programa se o nome fosse “Jhon’s”?

Outra coisa. Pq o nome dos seus campos estão com letra maiúscula? Pela convenção de nomes do java, atributos de classe deveriam começar com letra minúscula. Eu daria os nomes assim:

txtNome
txtTelefone
txtRG
txtCPF

Fica dentro da convenção e deixa claro que se trata de um JTextField.

[quote=ViniGodoy]Ele deve estar te dando uma mensagem de erro. Diga qual é.

Você adicionou o driver do mysql no seu projeto?[/quote]

add sim o driver do mysql no meu projeto, bem a mensagem de erro que ele mostra, na hora que eu executo o botão pra fazer a conexão e inserir e talz ele mostra isso:

java.lang.ClassNotFoundException: com.gjt.mm.mysql.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at bancodedados.CadastroClienteFrame.jButton1ActionPerformed(CadastroClienteFrame.java:99) at bancodedados.CadastroClienteFrame.access$000(CadastroClienteFrame.java:4) at bancodedados.CadastroClienteFrame$1.actionPerformed(CadastroClienteFrame.java:37) 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.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) 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:2440) at java.awt.Component.dispatchEvent(Component.java:4243) 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) Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: erro ao conectar at bancodedados.CadastroClienteFrame.jButton1ActionPerformed(CadastroClienteFrame.java:104) at bancodedados.CadastroClienteFrame.access$000(CadastroClienteFrame.java:4) at bancodedados.CadastroClienteFrame$1.actionPerformed(CadastroClienteFrame.java:37) 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.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) 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:2440) at java.awt.Component.dispatchEvent(Component.java:4243) 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)

bem, eu verifiquei meu minha tabela no banco de dado e está assim:

Field - Type - Null - Key - Default - Extra

codigo - int(11) - yes - pri - null - auto_increment
nome - varchar(45) - no - - null
telefone - varchar(45) - no - - null
rg - varchar(45) - no - - null
cpf - varchar(45) - no - - null

bem eu testei, o servidor tah ok, eu testei o banco de dados tah ok.

e agora???

Olha, por isso é bom ler as mensagens de erro.

Deu erro ao conectar, portanto, seu código ainda nem sequer executou o PreparedStatement (ou, no seu caso, o Statement), pois ele foi incapaz até de criar a conexão.
Ou seja, não vai ser problema nas suas tabelas, nem no texto da sua consulta, nem nada disso, pois o programa ainda nem chegou lá.

Bom, pelo visto você ainda está usando a classe errada do driver.
Ele diz claramente “não encontrei a classe com.gjt.mm.mysql.Driver”. Como o colega falou, a classe certa é “com.mysql.jdbc.Driver”.

Se você trocar e o erro persistir, poste a nova mensagem de erro aqui para a gente dar uma olhada.
Aliás, faça isso sempre que houver um erro nas duas dúvidas do GUJ. Sem o stackTrace fica muito difícil advinharmos qual é o problema.

bem, fiz tudo de novo, desde do zero, dae funciounou corretamente.

Obrigado pela atenção!