Duvida , como usar join[RESOLVIDO]

1 resposta
juliocesarsrosa

Ola galera estou com um probleminha relativamente simples porem não consigo resolver…

eu tenho uma classe top component que tem um botão pesquisar para efetuar a seguinte pesquisa

if (rbSeuNumero.isSelected()) {
                if (!StringUtil.isEmpty(txtSeuNumero.getText())) {
                    titulos = titulosDB.findBySeuNumero(new Long(txtSeuNumero.getText().trim()));

                        tableModel.addRow(new String[]{titulos.getSeuNumero().toString(), titulos.getNossoNumero().toString(), titulos.getMoeda(), titulos.getValorTitulo().toString(),titulos.getVencimento().toString(),/*sacado.getNomedoSacado(),*/titulos.getCarteira(),/*titulos.getStatusImpressao(),titulos.getStatusRemessas()titulos.getDataGeracao().toString()*/});
                    } else {
                        MessageUtil.informationMessage("CONSULTA_VAZIA");
                    }
                } else {
                    MessageUtil.errorMessage("REQUIRED_FIELDS");
                    txtSeuNumero.setBorder(errorBorder);
                }

Esse addRow geta os campos da grid o problema é exatamente o campo “Nome do sacado” pois todos os outros campos são da tabela “TITULOS” e apenas esse
é da tabela “SACADOS”…

Esse é o FYND BY que chama a QUERY

public Titulos findBySeuNumero(Long codigo) throws SQLException {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        Titulos titulos = null;

        try {

            connection = offlineDB.getConnection();

            preparedStatement = connection.prepareStatement(FIND_BY_SEU_NUMERO);
            preparedStatement.setLong(1, codigo);

            resultSet = preparedStatement.executeQuery();

            if (resultSet.next()) {
                titulos = new Titulos();
                titulos.setSeuNumero(resultSet.getLong("TIT_NR_SEU_NUM"));
                titulos.setCodigo(resultSet.getLong("SCD_ID"));
                titulos.setCarteira(resultSet.getString(" CRT_ID"));
                titulos.setMoeda(resultSet.getString("MOE_ID"));
                titulos.setValorTitulo(resultSet.getBigDecimal("TIT_VL_VAL"));
                titulos.setEspecie(resultSet.getString("ESP_ID"));
                titulos.setDataEmissao(resultSet.getInt("TIT_DT_EMI"));
                titulos.setVencimento(resultSet.getInt("TIT_IN_VNC"));               
                titulos.setValorAbatimento(resultSet.getBigDecimal("TIT_VL_ABT"));
                titulos.setMulta(resultSet.getBigDecimal("TIT_PC_MLT"));
                titulos.setValorMulta(resultSet.getBigDecimal("TIT_VL_MLT"));
                titulos.setValorBaseDesc(resultSet.getBigDecimal("TIT_VL_BAS_DSC"));
                titulos.setDesconto(resultSet.getBigDecimal("TIT_PC_DSC"));
                titulos.setValorDesconto(resultSet.getBigDecimal("TIT_VL_DSC"));
                titulos.setDataLimiteDesc(resultSet.getInt("TIT_DT_LMT_DSC"));
                titulos.setPorDiaAntecipação(resultSet.getBigDecimal("TIT_IN_DIA_ATP"));
                titulos.setInstrucao(resultSet.getString("TIT_IN_INST"));
                titulos.setDiasParaProtesto(resultSet.getInt("TIT_QT_DIA_PRT"));
                titulos.setJurosMes(resultSet.getBigDecimal("TIT_PC_JUR_MES"));
                titulos.setDiasParaJuros(resultSet.getInt("TIT_QT_DIA_JUR"));
                titulos.setValorJurosDia(resultSet.getBigDecimal("TIT_VL_JUR_DIA"));
                titulos.setValorIOFMes(resultSet.getBigDecimal("TIT_VL_IOF_MES"));
                titulos.setContrato(resultSet.getString("TIT_DS_CTR"));
                titulos.setMensagem1(resultSet.getString("SCD_DS_MSG1"));
                titulos.setMensagem2(resultSet.getString("SCD_DS_MSG2"));
                titulos.setMensagem3(resultSet.getString("SCD_DS_MSG3"));
                titulos.setParcelas(resultSet.getInt(" TIT_QT_PRC"));
                titulos.setMensagemInterativa(resultSet.getBoolean("TIT_IN_MSG_INT"));
                titulos.setUsoDoCliente(resultSet.getLong(" TIT_DS_USO_CLI"));
                titulos.setNossoNumero(resultSet.getLong(" TIT_NR_NOS_NUM"));
                
            }

        } catch (SQLException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);
            throw new SQLException(e);

        } catch (DBDriverNotFoundException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBInUseException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBConnectionException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBNotConfiguredException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } finally {

            if (resultSet != null) {
                resultSet.close();
            }

            if (preparedStatement != null) {
                preparedStatement.close();
            }

            if (connection != null) {
                connection.close();
            }
        }

        return titulos;
    }

Segue agora a respectiva QUERY

private static final String  FIND_BY_SEU_NUMERO = ""
            .concat("SELECT \r\n")
            .concat(FIELDS)
            .concat("FROM \r\n")
            .concat("   TB_TITULOS \r\n")
            .concat("WHERE \r\n")
            .concat("  TIT_NR_SEU_NUM = ?");

A questao é como fazer com que ele chame o campo “NOME SACADO” da TABLE SACADOS …

Segue os creates das tabelas

CREATE TABLE TB_SACADOS
(
	SCD_ID  NUMERIC(15) NOT NULL,
	SCD_CNPJ_CPF  VARCHAR(15) ,
	SCD_NM_FNT  VARCHAR(15) ,
	SCD_NM  VARCHAR(45) ,
	SCD_GRP  CHAR(18) ,
	SCD_DS_END  VARCHAR(37) ,
	SCD_NM_BRR  VARCHAR(15) ,
	SCD_CD_CEP  VARCHAR(8) ,
	SCD_NM_CID  VARCHAR(15) ,
	EST_ID  VARCHAR(2) ,
	SCD_CD_DDD  NUMERIC(4) ,
	SCD_NR_TEL  NUMERIC(8) ,
	SCD_NR_RML  NUMERIC(4) ,
	SCD_DS_EML  VARCHAR(55) ,
	SCD_CD_DDI_FAX  NUMERIC(4) ,
	SCD_CD_DDD_FAX  NUMERIC(4) ,
	SCD_NR_FAX  NUMERIC(8) ,
	SCD_NM_AVL  VARCHAR(40) ,
	SCD_CNPJ_CPF_AVL  VARCHAR(15) ,
	SCD_VL_ABT  NUMERIC(10,2) ,
	SCD_PC_JUR_MLT  NUMERIC(4,2) ,
	SCD_QT_DIA  NUMERIC(3) ,
	SCD_PC_IOF  NUMERIC(4,2) ,
	SCD_PC_DSC  NUMERIC(4,2) ,
	SCD_VL_DSC  NUMERIC(10,2) ,
	SCD_DS_MSG1  VARCHAR(40) ,
	SCD_DS_MSG2  VARCHAR(40) ,
	SCD_DS_MSG3  VARCHAR(40) 
)
;

ALTER TABLE TB_SACADOS
	ADD  PRIMARY KEY (SCD_ID)
;

Segue a outra table

CREATE TABLE TB_TITULOS
(
	TIT_NR_SEU_NUM  VARCHAR(15) NOT NULL,
	SCD_ID  NUMERIC(15),
	CRT_ID  NUMERIC(2),
	MOE_ID  VARCHAR(10),
	TIT_VL_VAL  NUMERIC(10,2),
	ESP_ID  VARCHAR(2),
	TIT_DT_EMI  DATE,
	TIT_IN_VNC  VARCHAR(2),
	TIT_DT_VNC  DATE,
	TIT_VL_ABT  NUMERIC(10,2),
	TIT_PC_MLT  NUMERIC(4,2),
	TIT_VL_MLT  NUMERIC(10,2),
	TIT_VL_BAS_DSC  NUMERIC(10,2),
	TIT_PC_DSC  NUMERIC(4,2),
	TIT_VL_DSC  NUMERIC(10,2),
	TIT_DT_LMT_DSC  DATE,
	TIT_IN_DIA_ATP  CHAR(1),
	TIT_IN_INST  NUMERIC(1),
	TIT_QT_DIA_PRT  NUMERIC(2),
	TIT_PC_JUR_MES  NUMERIC(4,2),
	TIT_QT_DIA_JUR  NUMERIC(2),
	TIT_VL_JUR_DIA  NUMERIC(10,2),
	TIT_VL_IOF_MES  NUMERIC(10,2),
	TIT_DS_CTR  VARCHAR(8),
	TIT_QT_PRC  NUMERIC(2),
	TIT_DS_MSG1  VARCHAR(40),
	TIT_DS_MSG2  VARCHAR(40),
	TIT_DS_MSG3  VARCHAR(40),
	TIT_IN_MSG_INT  CHAR(1),
	TIT_DS_USO_CLI  VARCHAR(25),
	TIT_NR_NOS_NUM  VARCHAR(9),
	TIT_NR_PRC  NUMERIC(2),
	CNV_ID  NUMERIC(8)
)
;


ALTER TABLE TB_TITULOS
	ADD  PRIMARY KEY (TIT_NR_SEU_NUM)
;


ALTER TABLE TB_FAIXAS_CONVENIOS
	ADD FOREIGN KEY (CNV_ID) REFERENCES TB_CONVENIOS(CNV_ID)
;


ALTER TABLE TB_PARAMETROS
	ADD FOREIGN KEY (CRT_ID) REFERENCES TB_CARTEIRAS(CRT_ID)
;


ALTER TABLE TB_TITULOS
	ADD FOREIGN KEY (SCD_ID) REFERENCES TB_SACADOS(SCD_ID)
;


ALTER TABLE TB_TITULOS
	ADD FOREIGN KEY (CRT_ID) REFERENCES TB_CARTEIRAS(CRT_ID)
;


ALTER TABLE TB_TITULOS
	ADD FOREIGN KEY (MOE_ID) REFERENCES TB_MOEDAS(MOE_ID)
;


ALTER TABLE TB_TITULOS
	ADD FOREIGN KEY (ESP_ID) REFERENCES TB_ESPECIES(ESP_ID)
;


ALTER TABLE TB_TITULOS
	ADD FOREIGN KEY (CNV_ID) REFERENCES TB_CONVENIOS(CNV_ID)
;

1 Resposta

M

Você não disse qual SGBD está usando, mas em MySQL ficaria assim:

SELECT * FROM TB_TITULOS
INNER JOIN TB_SACADOS
ON TB_TITULOS.SCD_ID = TB_SACADOS.SCD_ID

Além disso é possível adicionar um WHERE no final da consulta para pegar apenas resultados específicos.

Criado 29 de novembro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 1
Participantes 2