Mysql, jcheckBox e Jtable

Bom dia!!

Apenas para fins de estudo estou tentando desenvolver uma aplicação onde exporto dados de um banco mysql para txt. Os dados são cadastros de clientes e produtos.
Depois de muita pesquisa aki no forum e no google estou conseguindo gerar os arquivos sem problemas. Entretanto me deparei com um problema que não encontrei a solução mas acredito que seja simples para os mais experientes:

Para exportar os dados fiz uma interface gráfica com uma jtable (que exibe algumas informações de cada registro que esta em mysql), a jtable contem jCheckBox em cada registro e gostaria de exportar apenas os dados marcados na jtable para arquivo. O problema e que não consigo fazer uma consulta no banco só com alguns registros ex:

Tenho os seguintes registros na jTable:

Exportar | Cod | Nome | idade | sexo
[x] | 01 | Murillo | 18 | M
[ ] | 02 | Maria | 18 | M
[x] | 03 | Joao | 18 | M
[ ] | 04 | Jose | 18 | M
Obs.: A tabela do banco contem mais informações do que eu apresento na jtable

Gostaria de fazer um consulta no banco pelo codigo de cada registro selecionado [x] e armazenar todos em um unico resultset para passar como parametro para minha classe que gera o arquivo.

Se alguém tiver uma ídeia de como fazer isto??

Grato
Murillo

Opa tudo bem?
Acho que o que estas perguntando é sobre o comando IN…

Exemplos:

Select *
From
WHERE in (<ids marcados pelo usuario separados por “,”>)

Exemplo prático:

select *
from usuarios
where usuarioId in (1,2,3,4)

Espero ter ajudado…

Abs

Vou tentar utilizar!! Acho que pode dar certo!!!

So uma pergunta eu não sei a quantidade de registros que o usuario ira selecionar, como posso passar o comando com variação nos indices da pesquisa exemplo.

select *
from usuarios
where usuarioId in (1,2,3,4)

select *
from usuarios
where usuarioId in (1,2,)

select *
from usuarios
where usuarioId in (1,2,3,4,5,6,7,8,9)

Opa… pega os valores selecionados e passa para um list…
no teu dao, na hora que estiveres montando o teu sql faz um for com a tua lista e seta os valores do in…

Ok Obrigado!!

Estou começando a estudar list e var-args agora mas vou tentar e depois posto se deu certo!!

Agora outra duvida simples também:

Como posso fazer uma consulta no banco com um valor que ja possui aspas simples exemplo:

Quando faço um consulta passa para o mysql:

conn.execut(“Select * from tab_cidade Where cidade = '”+jtextField.getText()+"’");

Quando os valores do textfield não possuem aspas simples ( ’ ’ ) sem problemas, agora quando eles possuem (Alta Floresta D’Oeste) da erro. Como posso fazer esta consulta?

Obrigado novamente!!

Use um PreparedStatement para fazer isso. Se voce monta as SQLs concatenando com strings voce corre o risco de SQL Injection.

E a parte da Jtable é a mais fácil, pegue os objetos da lista do modelo, itereos e veja o que precisa ser adicionado.

Como está seu modelo?

Boa tarde Marky!!!
Sei que não é a maneiira correta de se fazer mas estou usando defaultTableModel!!! :? pelo simples motivoo que ainda não consegui implementar meu proprio model!!!
Ja li quase todos os topicos sobre model, o seu do viny mas infelizmente ainda nao consegui entende!!! Por isto estou começando a ver java do principio, bytecode, orientação a objeto, encapsulamento, abstração enfim tudo do começo pra depois implementar o meu! Depois disso vao me achar at meio lerdo né??? Mas infelizmente…

Agora como eu uso o PreparedStatement tem algum topico explicando???

Agora mesmo que eu implemente meu proprio model nao vou conseguir pegar os dados direto da jtable pois ela nao contem todos os dadoos que preciso para montar o arquivo!!! Por isto achei mais facil pegar apenas as referencias na table e fazer um select no banco!!!

Obrigado a todos!!!
Murillo

Então, essa é a sacada, com um model seu, voce vai ter todos os atributos dos objetos para cada linha, mesmo não mostrando todos eles na JTable.

E posta como voce faz o select.

Boa noite!!

Desculpe a demora pra responder e que não pd accessar a net estes dias, mas segue o modo como faço o select!!!

instancio minha classe de conexao;

Conexao conn = new Conexao();

Depois dou um select pelo metodo execute:

conn.execute(“SELECT * FROM tab_identificacaoempresa”);

Segue a classe conexão:

[code]package Utilitarios;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;

/**
*

  • @author Murillo PC
    */
    public class Conexao {
    String driver = “com.mysql.jdbc.Driver”; //Classe do driver JDBC
    String banco = “dbexpornotas?zeroDateTimeBehavior=convertToNull”; //Nome do Banco criado
    String host = “localhost”; //Maquina onde está o banco
    String str_conn = “jdbc:mysql://” + host + “:3306/” + banco; //URL de conexão
    String usuario = “root”; //Usuário do banco
    String senha = “root”; //Senha de conexão
    public Connection conn;
    public Statement stmt;
    public ResultSet resultSet;

    public void conecta(){
    try{
    Class.forName(driver); //Carrega o driver
    conn = DriverManager.getConnection(str_conn, usuario, senha);//Obtém a conexão com o banco
    stmt = conn.createStatement();//Cria um statement para podermos mandar um SQL para o banco
    }
    catch (ClassNotFoundException ex) {
    JOptionPane.showMessageDialog(null,“Não foi possível carregar o driver.”);
    ex.printStackTrace();
    }
    catch (SQLException ex) {
    JOptionPane.showMessageDialog(null,“Problema com o SQL”);
    ex.printStackTrace();
    }
    }

    public void desconecta(){
    try {
    conn.close();//fecha a conexão
    JOptionPane.showMessageDialog(null, “Conexão Fechada”);
    }
    catch (SQLException onConClose){
    JOptionPane.showMessageDialog(null,“Houve erro no fechamento da conexão”);
    onConClose.printStackTrace();
    }
    }

    public void execute(String sql){
    try{
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
    resultSet = stmt.executeQuery(sql);
    }
    catch (SQLException sqlex){
    JOptionPane.showMessageDialog(null, "Erro na excusão SQL "+ sqlex+ " o sql passado foi "+ sql);
    }

    }
    }[/code]

[quote=Murillo Pontes]Vou tentar utilizar!! Acho que pode dar certo!!!

So uma pergunta eu não sei a quantidade de registros que o usuario ira selecionar, como posso passar o comando com variação nos indices da pesquisa exemplo.

select *
from usuarios
where usuarioId in (1,2,3,4)

select *
from usuarios
where usuarioId in (1,2,)

select *
from usuarios
where usuarioId in (1,2,3,4,5,6,7,8,9) [/quote]

Boa noite!!!

Pessoal se alguém resolvi meu problema na semana passada, entretanto fui viajar e não deu pra postar o resultado aki mas seguee:

Bom resolvi o problema usando o sql in( ) conforme foi citado pelo colega, entretanto não usei nenhum list, carreguei os codigos do usuario em um string com o método concat() e depois passei esta string por parametro para ser executado:

[code] int numeroLinhas = jTableClientesFornecedores.getRowCount();
String marcar;
String codigo;
String selecao = “”;

    for (int i = 0; i<numeroLinhas; i++) {
        marcar = jTableClientesFornecedores.getModel().getValueAt(i, 0).toString();
        if (marcar.equals("true")){
            codigo = jTableClientesFornecedores.getModel().getValueAt(i, 1).toString();
            selecao += codigo+", ";
        }
    }

    numeroLetras = selecao.length();        
    numeroLetras = numeroLetras-2;
    marcar = selecao.substring(0, numeroLetras);[/code]

Tenho certeza que esta não é a melhor maneira para resolver isto entretanto estou estudando e tenho muito pra aprender, se alguém tiver um sugestão melhor!!!