Dúvida SQL

14 respostas
D
Pessoal estou tendo um problema em fazer um Insert no programa que estou fazendo. Estou usando Thinlet para digitar os dados e tentar popular a tabela, só que não estou conseguindo fazer com que os dados digitados sejam inseridos na tabela. Segue abaixo o código que estou utilizando:
Object lista = find("lista");
            Object item = Thinlet.create("item");
            setString(item, "text", getString(nome, "text"));
            putProperty(item, "endereco", getString(endereco, "text"));
            putProperty(item, "email", getString(email, "text"));
            putProperty(item, "telefone", getString(telefone, "text"));
            add(lista, item);
            try{
             
                //Registrando o driver: 
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
                //Estabelecendo a conexão através do ODBC criado no Painel de Controle: 
                Connection con = DriverManager.getConnection("jdbc:odbc:Teste","root",""); 
                //Criando um objeto Statement para enviar requisições SQL para o Banco de Dados 
                Statement stmt = con.createStatement();               
                            
                //Adquirindo através de um objeto ResulSet, 
                //os registros retornados pelo SQL:             
                ResultSet results = stmt.executeQuery("INSERT INTO  Contato (nome)" +
                         " VALUES (\"" + nome + "\") " );
Da maneira como estou fazendo, o dado que aparece no banco está sendo o seguinte:
[Ljava.lang.Object;@1571886

Agradeço se alguém puder me dar uma força.

14 Respostas

Rafael_Nunes

Eu creio que este objeto nome que você está usando é um Object, não uma String.
E creio também que no insert nome deve estar entre aspas simples, não dupla.

rodrigo_gomes

pra fazer o insert use o metodo executeUpdate;

PreparedStatement stmt =  
      conn.prepareStatement("INSERT INTO  Contato (nome) VALUES (?) ");
stmt.setString(1,nome);
stmt.executeUpdate();
D

Valeu pela ajuda pessoal. Estou utilizando a sugestão do rodrigo_gomes, mas acontece que o programa está acusando um erro em : stmt.setString(1,nome);
Onde ele mostra que o método setString que é para (int, String) não é aplicável no caso de (int, Object).
E ao comentar esta parte do código, o programa insere novamente

[Ljava.lang.Object;@1bd747e

Agradeço se puderem me ajudar.

cu_ringa

usa-se executeQuery só para consultas(SELECT) e executeUpdate para qnd os dados sao mudados(INSERT, DELETE, UPDATE).

Rafael_Nunes

Qual o tipo da variável ‘nome’?

cu_ringa

douglascar

Onde ele mostra que o método setString que é para (int, String) não é aplicável no caso de (int, Object).
E ao comentar esta parte do código, o programa insere novamente [Ljava.lang.Object;@1bd747e

nome deve estar declarado como Object e n String. Se isso tiver ocorrendo vc tem q fazer a coercao. mostre como vc declarou nome.
tipo:

String str1 = "java";
String str2;
Object nome;

nome = str1;
str2 = (String) nome
cu_ringa

douglascar

Onde ele mostra que o método setString que é para (int, String) não é aplicável no caso de (int, Object).
E ao comentar esta parte do código, o programa insere novamente [Ljava.lang.Object;@1bd747e

nome deve estar declarado como Object e n String. Se isso tiver ocorrendo vc tem q fazer a coercao. mostre como vc declarou nome.
tipo:

String str1 = "java";
String str2;
Object nome;

nome = str1;
str2 = (String) nome
D
Desculpe pessoal, eu não havia colocado toda a parte do código na mensagem anterior. Acontece que como havia mencionado estou utilizando Thinlet para fazer esta aplicação, mas como entendo pouco do assunto estou meio perdido.
public void adicionar(){
        Object nome = find("nome");
        Object endereco = find("endereco");
        Object email = find("email");
        Object telefone = find("telefone");
        if(getString(nome, "text") == null || getString(nome, "text").trim().length() < 1 
|| getString(email, "text") == null 
|| getString(email, "text").trim().length() < 1 
|| getString(endereco, "text") == null 
|| getString(endereco, "text").trim().length() < 1){
            return;
        } else
        {            
            Object lista = find("lista");
            Object item = Thinlet.create("item");
            setString(item, "text", getString(nome, "text"));
            putProperty(item, "endereco", getString(endereco, "text"));
            putProperty(item, "email", getString(email, "text"));
            putProperty(item, "telefone", getString(telefone, "text"));
            add(lista, item);
            try{
             
                //Registrando o driver: 
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
                //Estabelecendo a conexão através do ODBC criado no Painel de Controle: 
                Connection con = DriverManager.getConnection("jdbc:odbc:Teste","root",""); 
                //Criando um objeto Statement para enviar requisições SQL para o Banco de Dados 
                //Statement stmt = con.createStatement();               
                            
                //Adquirindo através de um objeto ResulSet, 
                //os registros retornados pelo SQL:               
                
                PreparedStatement stmt =  
                    con.prepareStatement("INSERT INTO  Contato (nome) VALUES (\"" + nome + "\")  ");
                
              stmt.setString(1,nome);
              stmt.executeUpdate();
                stmt.close();
A variável nome é um Object o qual pega o conteúdo de "nome" que vem de um arquivo .xml
<label text="Nome: " />
        <textfield name="nome" weightx="1" />
Rafael_Nunes

Então faz um nome.toString() pra colocar ela no setString, tipo:

setString(1,nome.toString());
D

Rafael, fazendo desta maneira o erro desapareceu, mas ao executar o programa, é retornada a seguinte mensagem:

Erronull
Devido ao catch que coloquei no final da rotina }catch(Exception e){ System.out.println("Erro"+ e.getMessage()); }
E assim não inseriu nada na tabela.

Rafael_Nunes

Se está retornando null, é porque o método find() não encontrou nada para ‘nome’.

rodrigo_gomes

Olá,

o que isso find(“nome”); retorna? Um objeto String?
Se for, não da pra fazer String nome = (String) find(“nome”);?

D
Se está retornando null, é porque o método find() não encontrou nada para 'nome'.
Pessoal, acho que o programa só está retornando dados para a tela do xml. Gostaria de saber como faço para que o dados da tela xml que estão da seguinte maneira:
<panel columns="1">
  <splitpane divider="150" weightx="1" weighty="1">
    <list name="lista" perform="exibir(this)">
    </list>
    <panel columns="3" top="4" left="4" bottom="4" right="4" gap="4">
      <panel colspan="4" columns="2" gap="4">
        <label text="Nome: " />
        <textfield name="nome" weightx="1" />        
        <label text="email: " />
        <textfield name="email" weightx="1" />
        <label text="Endereco: " />
        <textfield name="endereco" weightx="1" />
        <label text="Telefone: " />
        <textfield name="telefone" weightx="1" />
      </panel>
      <button name="salvar" text="Salvar" weightx="1" action="adicionar()" />
      <button name="limpar" text="Limpar" weightx="1" action="limpar(nome, email, endereco, telefone)" />
      <button name="remover" text="Remover" weightx="1" action="remover()" />
    </panel>
  </splitpane>
</panel>
Sejam retornados para a tela do programa. A função no arquivo java esta da seguinte maneira:
public void adicionar(){
        Object nome = find("nome");
        Object endereco = find("endereco");
        Object email = find("email");
        Object telefone = find("telefone");
        System.out.println("nome:" + nome.hashCode());
        String Nome = nome.toString();
        System.out.println("Nome:" + Nome);
        if(getString(nome, "text") == null 
|| getString(nome, "text").trim().length() < 1 
|| getString(email, "text") == null 
|| getString(email, "text").trim().length() < 1 
|| getString(endereco, "text") == null 
|| getString(endereco, "text").trim().length() < 1){
            return;
        } else
        {            
            
            Object lista = find("lista");
            Object item = Thinlet.create("item");
            setString(item, "text", getString(nome, "text"));
            putProperty(item, "endereco", getString(endereco, "text"));
            putProperty(item, "email", getString(email, "text"));
            putProperty(item, "telefone", getString(telefone, "text"));
            add(lista, item);
            System.out.println("nome" + nome);
            try{           
                //Registrando o driver: 
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
                //Estabelecendo a conexão através do ODBC criado no Painel de Controle: 
                Connection con = DriverManager.getConnection("jdbc:odbc:Teste","root",""); 
                //Criando um objeto Statement para enviar requisições SQL para o Banco de Dados 
                //Statement stmt = con.createStatement();               
                            
                //Adquirindo através de um objeto ResulSet, 
                //os registros retornados pelo SQL:
                PreparedStatement stmt =  
                    con.prepareStatement("INSERT INTO  Contato (nome) VALUES (\"" + nome + "\")  ");
                
                stmt.setString(1,nome.toString());
                stmt.executeUpdate();
                stmt.close();
                
                Statement sta = con.createStatement();
                ResultSet rec = sta.executeQuery(      
                        "SELECT * " +
                		"FROM Contato " );
                System.out.println("CodCidade\tDescrCidade\t\t\tUF\t" +
                "CodRecor");
	            while(rec.next()) {
	                System.out.println(rec.getString(1) +  "\t\t"
	                        + rec.getString(2) + "\t\t"
	                        + rec.getString(3) + "\t"
	                        + rec.getString(4));
	            }
	            sta.close();
                
                
            }catch(Exception e){
       		 System.out.println("Erro"+ e.getMessage());
       	    }
        }
    }
Agradeço se puderem me dar uma dica.
A

DouglasCar

PreparedStatement stmt = con.prepareStatement("INSERT INTO Contato (nome) VALUES (\"" + nome + "\") ");

Pq vc esta inserindo assim ? (nome)

.... ("INSERT INTO Contato ([color=red]nome[/color]) VALUES

quando vc insere na tabela Contato, vc ja passa o nome como atributo, nao sei se vc ja resolvel ou se isso pode te ajudar, mas tentei !

[]s

Criado 19 de abril de 2005
Ultima resposta 3 de jun. de 2005
Respostas 14
Participantes 5