Como Utilizar a DAO! Urgente para projeto Final!

9 respostas
S

Bom dia pessoal!!

Estou elaborando o projeto final e esbarrei num problema.
Tenho que criar a classe DAO, porém, não consigo inserir o valor digitado na interface no meu banco de dados (passando por uma classe intermediária), a classe DAO não está recebendo o valor !!!

Obs: o valor não pode passar direto da caixa de texto para o banco.

Abaixo o código que estou usando:

A inteface:

package view;

import model.client;
import control.Dao;

public class teste extends javax.swing.JFrame {

/** Creates new form BeanForm */
public teste() {
    initComponents();
}

public void receber()
{
    client ci = new client();
    ci.setNome(txtNome.getText());
    System.out.println(ci.getNome());
    
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

Dao da = new Dao();

da.criarTabela();

receber();

da.inserirDados();
}


A classe DAO:

package control;

import java.sql.<em>;

import org.postgresql.util.</em>;

import java.util.*;

import model.client;

public class Dao {

/** Creates a new instance of Dao */
public Dao() {
}

String url    = "jdbc:postgresql://localhost/Banco";
String usuario= "gui";
String senha  = "post";
    
client c = new client();

    public client inserirDados() 
   {
        
       try {
	  Class.forName("org.postgresql.Driver");
              Connection con = DriverManager.getConnection(url,usuario,senha);
	  
	  StringBuffer sql = new StringBuffer();
	  sql.append("INSERT INTO tablogi(nome)" );
	  sql.append("VALUES (?)");
	  PreparedStatement ps = con.prepareStatement(sql.toString());  
	  
              String nome = c.getNome();
              
              
              ps.setString(1, nome);
	     			
	  ps.executeUpdate();
	  
	  ps.close();
	  con.close();
	} 
       catch (Exception e) {
   System.err.println("Problemas com SQL: "+e.getMessage()); }
    
    return c;
	                                         
   }

A classe intermediária:

public class client {

/** Creates a new instance of client */
public client() {
}

private String nome;

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

}

A classe controle:

package control;

import view.teste;

public class principal {

/** Creates a new instance of principal */
public principal() {
}
public static void main (String args[])

{

teste pi = new teste();

pi.setBounds (0,0,800,600);

pi.setVisible(true);
}

}

O net.beans me retorna o seguinte erro:
Problemas com SQL: ERROR: null value in column “nome” violates not-null constraint

9 Respostas

rogeriop80

O problema é que quando você passa o nome para o statament ele está indo null.

A mensagem de erro diz que o valor do campo nome não pode ser null.

Olhe a sequencia que vc criou.

Class.forName("org.postgresql.Driver"); 
Connection con = DriverManager.getConnection(url,usuario,senha); 

StringBuffer sql = new StringBuffer(); 
sql.append("INSERT INTO tablogi(nome)" ); 
sql.append("VALUES (?)"); 
PreparedStatement ps = con.prepareStatement(sql.toString()); 

String nome = c.getNome(); 


ps.setString(1, nome);

Não esqueça de colocar o codigo dentro das tags de code qdo postar uma mensagem.

Onde você esta setando o nome de c ? Onde você faz o c.setNome ?

S

Rogerio mto obrigado pela atenção, me desculpe mas naum entendi qdo vc pergunta onde estou setando o nome de c e onde eu faço o c.set nome!

o q eu entendi eh q estou setando nesse codigo:

String nome = c.getNome();

e o set esta sendo feito na classe intermediaria:

public void setNome(String nome) { this.nome = nome; }
Se vc tiver msn q possa nos passar para tentarmos resolver isso juntos rogério, seria melhor. mas desde de já agreço mtooo a sua atenção.

o meu msn eh: [email removido]

estou online ateh as 15:00

um abraço!

furutani

Olá

Voce tem certeza que a variavel nome esta com algum conteudo, ou seja, é diferente de null?

String nome = c.getNome(); ps.setString(1, nome);

rogeriop80

Faça sua funcao inserir receber um objeto do tipo cliente… e na funcao inserir faca esse objeto passar o valor para a variavel nome.

Simples :-).

S

Rogério,

Vlw pela dica, funcionou perfeitamente do jeito que vc explicou.

Muito obrigado e estou a disposição para qualquer ajuda, apesar de ainda estar começando com JAVA. rsrsrs.

lucianotome
package view;

import model.client;
import control.Dao;

public class teste extends javax.swing.JFrame {

/** Creates new form BeanForm */
public teste() {
initComponents();
}

public Client receber()
{
client ci = new client();
ci.setNome(txtNome.getText());
return ci;

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Dao da = new Dao();
da.criarTabela();
da.inserirDados(receber();


}


A classe DAO:

package control;
import java.sql.*;
import org.postgresql.util.*;
import java.util.*;
import model.client;

public class Dao {

/** Creates a new instance of Dao */
public Dao() {
}

String url = "jdbc:postgresql://localhost/Banco";
String usuario= "gui";
String senha = "post";

public inserirDados(Client c)
{

try {
Class.forName("org.postgresql.Driver");
Connection con = DriverManager.getConnection(url,usuario,senha);

StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO tablogi(nome)" );
sql.append("VALUES (?)");
PreparedStatement ps = con.prepareStatement(sql.toString());

String nome = c.getNome();


ps.setString(1, nome);

ps.executeUpdate();

ps.close();
con.close();
}
catch (Exception e) {
System.err.println("Problemas com SQL: "+e.getMessage()); }

return c;

}


A classe intermediária:

public class client {

/** Creates a new instance of client */
public client() {
}

private String nome;

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

}

A classe controle:

package control;

import view.teste;

public class principal {

/** Creates a new instance of principal */
public principal() {
}

public static void main (String args[])
{
teste pi = new teste();
pi.setBounds (0,0,800,600);
pi.setVisible(true);

}

}
Cara eu sou meio leigo em java, porem eu penso que assim funciona.

Porque o seu Metodo inserirDados estava retornando Client?

Se você estava chamando ele desta forma, da.inserirDados();

Qual a utilidade?

Outra,  coisa

public void receber()

{

client ci = new client(); --> Criou aqui

ci.setNome(txtNome.getText());

System.out.println(ci.getNome());

} —>Morreu Aqui;
Aonde você vai acessar esta instancia de classe, “ci”?Ela nasce ai e morre ai.
Desta forma como esta, qualquer informação que você tentar persistir sera perdida.

Ps.Estou aprendendo, se alguem puder ajudar!!

Outro Ps com revisão.
Quando eu estava copiando o código o nosso amigo rogeriop80, respondeu a duvida, foi mal ai, galera.

S

Furutami,

Vlw pela atenção, a variável com certeza não estava nula.
Consegui resolver com a dica do Rogério.
Mesmo assim muito obrigado !

lucianotome
lucianotome:
package view;

import model.client;
import control.Dao;

public class teste extends javax.swing.JFrame {

/** Creates new form BeanForm */
public teste() {
initComponents();
}

public Client receber()
{
client ci = new client();
ci.setNome(txtNome.getText());
return ci;

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Dao da = new Dao();
da.criarTabela();
da.inserirDados(receber());


}


A classe DAO:

package control;
import java.sql.*;
import org.postgresql.util.*;
import java.util.*;
import model.client;

public class Dao {

/** Creates a new instance of Dao */
public Dao() {
}

String url = "jdbc:postgresql://localhost/Banco";
String usuario= "gui";
String senha = "post";

public inserirDados(Client c)
{

try {
Class.forName("org.postgresql.Driver");
Connection con = DriverManager.getConnection(url,usuario,senha);

StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO tablogi(nome)" );
sql.append("VALUES (?)");
PreparedStatement ps = con.prepareStatement(sql.toString());

String nome = c.getNome();


ps.setString(1, nome);

ps.executeUpdate();

ps.close();
con.close();
}
catch (Exception e) {
System.err.println("Problemas com SQL: "+e.getMessage()); }

return c;

}


A classe intermediária:

public class client {

/** Creates a new instance of client */
public client() {
}

private String nome;

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

}

A classe controle:

package control;

import view.teste;

public class principal {

/** Creates a new instance of principal */
public principal() {
}

public static void main (String args[])
{
teste pi = new teste();
pi.setBounds (0,0,800,600);
pi.setVisible(true);

}

}
Cara eu sou meio leigo em java, porem eu penso que assim funciona. Porque o seu Metodo inserirDados estava retornando Client? Se você estava chamando ele desta forma, "da.inserirDados();" Qual a utilidade? Outra, coisa public void receber() { client ci = new client(); --> Criou aqui ci.setNome(txtNome.getText()); System.out.println(ci.getNome());

} --->Morreu Aqui;
Aonde você vai acessar esta instancia de classe, "ci"?Ela nasce ai e morre ai.
Desta forma como esta, qualquer informação que você tentar persistir sera perdida.

Ps.Estou aprendendo, se alguem puder ajudar!!

Outro Ps com revisão.
Quando eu estava copiando o código o nosso amigo rogeriop80, respondeu a duvida, foi mal ai, galera.

Petronio_Braga

Dá uma visitada nesse link aqui abaixo.

Baixa a apostila que é disponibilizada. Um dos tópicos é sobre o padrão DAO. Ele explica de forma bem didática o padrão.

Criado 12 de maio de 2007
Ultima resposta 12 de mai. de 2007
Respostas 9
Participantes 5