Inserir textfield em sql

23 respostas
M

como qe faço pra pegar uma referencia vindo de um textfield e colocor no meu select?

é aquela parte qe precisa por “” %% nao sei bem como eh, abaixo ta o meu codigo, so que ta dando pau, alguem poderia me ajudar…

23 Respostas

drsmachado

Qual o erro?
A chamada do método getText() está correta.

Concatenação de string (quando uma variável será adicionada) em java funciona assim

iint e = 12;
String str = "Valor da variavel e = "+e;
M

ele so mostra erro de sintaxe

M

acho tbm qe precisa do sinal de +, nao sei a ordem correta entre esses “”, ++, %%

drsmachado

O símbolo que você está tentando inserir (%) apenas irá dizer ao banco de dados que você precisa de um resultado onde o valor da coluna especificada contenha o valor passado como parâmetro.

A sua string está errada, corrija-a.

M

consegui, agora ta dando esse erro:

A character to numeric conversion process failed

drsmachado

Manda a pilha dos erros.
E o código.

M

tenho esse select aqui:

String sql =  "select clientes.nom_cliente,  "
            + "clientes.end_cliente, "
            + "cidades.den_cidade, "
            + "ordem_montag_lote.num_lote_om, "
            + "ordem_montag_mest.num_om, "
            + "item.den_item, "
            + "cores.den_cor, "
            + "ped_itens_grade.qtd_pecas_solic, "
            + "cidades.cod_uni_feder "
+ "from ordem_montag_mest join ordem_montag_item on (ordem_montag_mest.cod_empresa = ordem_montag_item.cod_empresa and ordem_montag_mest.num_om = ordem_montag_item.num_om) "
     + "join ordem_montag_lote on (ordem_montag_lote.cod_empresa = ordem_montag_mest.cod_empresa and ordem_montag_lote.num_lote_om = ordem_montag_mest.num_lote_om) "
     + "join pedidos on (pedidos.cod_empresa = ordem_montag_item.cod_empresa and pedidos.num_pedido = ordem_montag_item.num_pedido) "
     + "join ped_itens on (pedidos.cod_empresa = ped_itens.cod_empresa and pedidos.num_pedido = ped_itens.num_pedido  and ordem_montag_item.num_sequencia = ped_itens.num_sequencia) "
     + "join estrut_grade on (ped_itens.cod_item = estrut_grade.cod_item_pai and ped_itens.cod_empresa = estrut_grade.cod_empresa) "
     + "join ped_itens_grade on (ped_itens_grade.cod_empresa = ped_itens.cod_empresa "
     +                         "and ped_itens_grade.num_pedido = ped_itens.num_pedido "
     +                         "and ped_itens_grade.num_sequencia = ped_itens.num_sequencia "
     +                         "and ped_itens_grade.cod_grade_1 = estrut_grade.cod_grade_1) "
     + "join item on (estrut_grade.cod_empresa = item.cod_empresa and estrut_grade.cod_item_compon = item.cod_item) "
     + "join cores on (ped_itens_grade.cod_grade_1 = cores.cod_cor) "
     + "join clientes on (pedidos.cod_cliente = clientes.cod_cliente) "
     + "join cidades on (clientes.cod_cidade = cidades.cod_cidade) "
+ "where ordem_montag_lote.num_lote_om = '%"+itc.jtflote.getText()+"%' "
+ "order by ordem_montag_mest.num_om, item.den_item ";
nessa linha
+ "where ordem_montag_lote.num_lote_om = '%"+itc.jtflote.getText()+"%' "
estou pegando o valor do textfield que é um valor numerico pra ele poder gerar o arquivo qe eu quero, esse valor qe to pegando é uma referencia...

aparece o seguinte erro:

A character to numeric conversion process failed

sera que isso é erro de conversao??

drsmachado

O tipo de dado obtido aqui

itc.jtflote.getText()

é numérico?
A coluna ordem_montag_lote.num_lote_om é de um tipo numérico?
Então esqueça os %.
Pode retirá-los.

M

sao valores numericos sim…

tirei o % e nao deu mais erro, porem nao gerou o arquivo que eu quero,
se eu trocar o

'"+itc.jtflote.getText()+"' por um numero d elote existente, por exemplo o 910,
ele gera o aruivo qe preciso normal…

qe sera qe ta acontecendo??

drsmachado

Ao invés de pegar o valor do textfield direto, atribua-o a uma variável. Aí você até pode debugar ou mesmo confirmar se ela está sendo obtida.

M

blz, fiz assim:

String lote = itc.jtflote.getText();

declarei como String pq se eu declarar a variavel lote como qualquer outro tipo, ele aparece aquele triangulozinho vermelho com
o ponto de exclamaçao no meio dizendo pra converter a variavel para String…

na hora qe to debugando essa variavel String lote aparece qe recebeu isso(""), acredito qe seja valor nenhum
e se eu levar o mouse em cima dela, aparece a msg

drsmachado

O método getText() retorna uma String.

Sim, nenhum valor foi pego.
O campo foi preenchido?
Posta os trechos do textfield e da variavel.
E utilize as tags

E

Cara, tira as aspas simples. Valores numéricos não necessitam de aspas.

M

o campo foi preenchido sim, eu executo
e coloco o 910 qe eu se qe existe no banco…

como assim posta os trechos do textfield e da variavel??

nao entendi…

drsmachado

O problema, neste momento, já é outro.
O SQL se vira e entende que, embora possua aspas, o valor é numérico.

A questão é o que está ocorrendo para que o método get não esteja “pegando” o valor preenchido.

M

se eu tirar as aspas simples ele da erro de sintaxe

M

e agora, qe eu faço? snirf :frowning:

drsmachado

Posta o código.

M

eu fiz um teste com

e pedi pra imprimi atraves do System.out.println e ao inves dele imprimir o numero ele imprimi lote…

entao realmente o gettext nao esta pegando o valor qe eu estou digitando…

M

ai esta o codgio

public class ClasseEiqueta {
   
    static void GerarArquivo() {
        Interface itc = new Interface();
       

        String etiqueta = "";
        String nom_cliente = "";
        String end_cliente = ""; 

        Statement stmt;
        ResultSet rs;

        String url = ("jdbc:informix-sqli://192.168.0.242:1525:DATABASE=logix;INFORMIXSERVER=prdfiasini;user=informix;password=informix");

        Connection conn = null;

        System.out.println(url);

        try {
             Class.forName("com.informix.jdbc.IfxDriver");
        }
        catch (Exception e) {
            System.out.println(e);
        }

         try {
            conn = (Connection) DriverManager.getConnection(url);
            System.out.println("\nAqui conn: " + conn.toString());

        } catch (SQLException sqlex) {
            
        }

        try {
            System.out.println("Connected ...");
            DatabaseMetaData md = conn.getMetaData();
            System.out.println("Driver name: " + md.getDriverName());
            System.out.println("Driver version: " + md.getDriverVersion());
            System.out.println("Database product name: "
                    + md.getDatabaseProductName());
            System.out.println("Database product version: "
                    + md.getDatabaseProductVersion());
            
        String sql =  "select clientes.nom_cliente,  "
            + "clientes.end_cliente, "
            + "cidades.den_cidade, "
            + "ordem_montag_lote.num_lote_om, "
            + "ordem_montag_mest.num_om, "
            + "item.den_item, "
            + "cores.den_cor, "
            + "ped_itens_grade.qtd_pecas_solic, "
            + "cidades.cod_uni_feder "
+ "from ordem_montag_mest join ordem_montag_item on (ordem_montag_mest.cod_empresa = ordem_montag_item.cod_empresa and ordem_montag_mest.num_om = ordem_montag_item.num_om) "
     + "join ordem_montag_lote on (ordem_montag_lote.cod_empresa = ordem_montag_mest.cod_empresa and ordem_montag_lote.num_lote_om = ordem_montag_mest.num_lote_om) "
     + "join pedidos on (pedidos.cod_empresa = ordem_montag_item.cod_empresa and pedidos.num_pedido = ordem_montag_item.num_pedido) "
     + "join ped_itens on (pedidos.cod_empresa = ped_itens.cod_empresa and pedidos.num_pedido = ped_itens.num_pedido  and ordem_montag_item.num_sequencia = ped_itens.num_sequencia) "
     + "join estrut_grade on (ped_itens.cod_item = estrut_grade.cod_item_pai and ped_itens.cod_empresa = estrut_grade.cod_empresa) "
     + "join ped_itens_grade on (ped_itens_grade.cod_empresa = ped_itens.cod_empresa "
     +                         "and ped_itens_grade.num_pedido = ped_itens.num_pedido "
     +                         "and ped_itens_grade.num_sequencia = ped_itens.num_sequencia "
     +                         "and ped_itens_grade.cod_grade_1 = estrut_grade.cod_grade_1) "
     + "join item on (estrut_grade.cod_empresa = item.cod_empresa and estrut_grade.cod_item_compon = item.cod_item) "
     + "join cores on (ped_itens_grade.cod_grade_1 = cores.cod_cor) "
     + "join clientes on (pedidos.cod_cliente = clientes.cod_cliente) "
     + "join cidades on (clientes.cod_cidade = cidades.cod_cidade) "
+ "where ordem_montag_lote.num_lote_om = '"+itc.jtflote.getText()+"' "
+ "order by ordem_montag_mest.num_om, item.den_item ";

        PreparedStatement stmtt = conn.prepareStatement(sql);
        ResultSet rss = stmtt.executeQuery();

              while (rss.next()){
                nom_cliente = rss.getString("nom_cliente");
                end_cliente = rss.getString("end_cliente");
                String cidade = rss.getString("den_cidade");
                String num_lote_om = rss.getString("num_lote_om");
                String num_om = rss.getString("num_om");
                String den_item = rss.getString("den_item");
                String cor = rss.getString("den_cor");
                float qtd_item = Float.parseFloat(rss.getString("qtd_pecas_solic"));
                String estado = rss.getString("cod_uni_feder");
                int int_qtd_item = Float.floatToIntBits(qtd_item);
                System.out.println(qtd_item);

                for( int i = 0; i < qtd_item; i++ )
                {
                  etiqueta += "^XA";
                  etiqueta += "\n^FWR";
                  etiqueta += "\n ^FO660,40^A0,50,40^FDCliente: ^FS";
                  etiqueta += "\n^FO650,170^A0,75,45^FD"+nom_cliente.trim()+"^FS";
                  etiqueta += "\n^FO560,40^A0,50,40^FDEndereco: ^FS";
                  etiqueta += "\n^FO550,200^A0,60,40^FD"+end_cliente.trim()+"^FS";
                  etiqueta += "\n^FO460,40^A0,50,40^FDCidade: ^FS";
                  etiqueta += "\n^FO450,170^A0,60,40^FD"+cidade.trim()+"^FS";
                  etiqueta += "\n^FO360,40^A0,50,40^FDNum Lote: ^FS";
                  etiqueta += "\n^FO350,210^A0,68,40^FD"+num_lote_om.trim()+"^FS";
                  etiqueta += "\n^FO260,40^A0,50,40^FDNum OM: ^FS";
                  etiqueta += "\n^FO255,200^A0,68,40^FD"+num_om.trim()+"^FS";
                  etiqueta += "\n^FO160,40^A0,50,40^FDItem: ^FS";
                  etiqueta += "\n^FO150,160^A0,68,40^FD"+den_item.trim()+"^FS";
                  etiqueta += "\n^FO70,40^A0,50,35^FDCor: ^FS";
                  etiqueta += "\n^FO70,140^A0,60,35^FD"+cor.trim()+"^FS";
                  etiqueta += "\n^FO460,510^A0,50,35^FDEstado: ^FS";
                  etiqueta += "\n^FO450,630^A0,60,35^FD"+estado.trim()+"^FS";
                  etiqueta += "\n^XZ";
                }
                GerarArquivo(etiqueta);
            } 

        } catch (SQLException e) {
            System.out.println(e);
        }
            
        System.out.println("Done!");
        
     }


    @SuppressWarnings("unchecked")

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {

                    new Interface().setVisible(true);

            }
        });
    }

    private void mostrarErro(String msg) {
         JOptionPane.showMessageDialog(
                null,
                msg,
                "Erro encontrado",
                JOptionPane.ERROR_MESSAGE);
    }
    public static String GerarArquivo(String textoEtiqueta){
        try{
          File arquivo;

          arquivo = new File("c:\\entrega000.etq");
          FileOutputStream fos = new FileOutputStream(arquivo);
          String texto = textoEtiqueta;
          fos.write(texto.getBytes());
          fos.close();
      }
      catch (Exception ee) {
          ee.printStackTrace();
      }
      return "ok";
  }
}
E

Por isso deu erro de sintaxe, por que tem uma string onde não devia.

marcos, o código que nós precisamos é o da interface gráfica. Se você fez no netbeans, deve ter uma opção de “view code”. Posta o código da interface agora que agente acha o erro.

Uma última dica: não digite e aperte o botão. Digite, aperte tab, e só então dê o enter.

M

botao gerar etiqueta:

private void jbGerarActionPerformed(java.awt.event.ActionEvent evt) { ClasseEiqueta.GerarArquivo(); }

E

Ok, esse é um passo, agora preciso que você nos mostre o código onde são criados os text fiels, onde aparece “new JTextfield()”… Tá em algum lugar aí , procura e copia e cola aqui.

Criado 31 de janeiro de 2011
Ultima resposta 1 de fev. de 2011
Respostas 23
Participantes 3