Não consigo chamar os código do banco de dados no jcombobox[RESOLVIDO]

Quando tento chamar o código do filme no jcomboBox ele mé da esse erro “Before start of result Set”

segue o método:

public void preenche(){
	java.sql.Connection conn = null;
	// Variável responsável por preparar a execução da query
	java.sql.PreparedStatement pstm = null;
	// Variável responsável por receber o retorno das informações
	// consultadas`
ResultSet rs = null;`
	try{
	
		conn = ConnectDB.conexaoDB();
		pstm = conn.prepareStatement(SELECT_FILME);
		rs = pstm.executeQuery();
		do{
			
			cbCodigo.addItem(rs.getString("codigo_filme"));
			
		}while(rs.next());
		
	}catch(SQLException e){
		JOptionPane.showMessageDialog(null, "Ocorreu um erro"+ e.getMessage());
	} }`

Acho que isso acontece por que você está fazendo um do while ao invés de um while.
Se você está fazendo pois se preocupa que o método next() do ResultSet vai ignorar o primeiro registro, esqueça!
Esse método pega o primeiro registro sim!

Com o do while você tenta fazer rs.getString("codigo_filme") sendo que o ResultSet não está com nenhum registro “no gatilho”, saca?

Faça apenas o while diretamente!

Espero ter ajudado.

Abs.

Eu fiz com o while mas ele me dá um java.lang.null.pointerException

Faz com o while e ao invés de passar o retorno do resultSet pro combo, mande printar no console e mande o que sai por favor.

Manda a query que você tá tentando rodar também

java.lang.NullPointerException
at view.JFrameLocacao.preenche(JFrameLocacao.java:421)
at view.JFrameLocacao.(JFrameLocacao.java:129)
at view.JFrameLocacao$1.run(JFrameLocacao.java:68)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Query

 SELECT codigo_filme FROM filmes

Caramba… Coloca o código da classe toda por favor.

public class JFrameLocacao extends JFrame {

	private JPanel contentPane;
	private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
	private JPanel listagem;
	private JPanel cadastro;
	private JLabel lblCodigoFilme;
	private JTextField codigo_filme;
	private JLabel codFuncionario;
	private JTextField codigo_funcionario;
	private JLabel codCliente;
	private JTextField codigo_cliente;
	private JLabel dtLocacao;
	private JTextField dt_locacao;
	private JComboBox cbFiltro;
	private JComboBox cbCodigo;
	private JLabel dtDevolucao;
	private JTextField dt_devolucao;
	private JTextField txtPesquisa;
	private DefaultTableModel linha = new DefaultTableModel();
	private JTable tabela;
	
	private String SELECT_FILME = "SELECT codigo_filme FROM filmes";
	
	private int codigoEditar = 0;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JFrameLocacao frame = new JFrameLocacao();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 * @throws ParseException 
	 */
	public JFrameLocacao() throws ParseException {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 512, 563);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		panel.setBounds(0, 0, 617, 390);
		getContentPane().add(panel);
		panel.setLayout(null);
		tabbedPane.setBackground(Color.WHITE);
		tabbedPane.setBounds(0, 0, 486, 514);
		panel.add(tabbedPane);
		
		cadastro = new JPanel();
		cadastro.setBackground(Color.WHITE);
		tabbedPane.addTab("Cadastro", null, cadastro, null);
		cadastro.setLayout(null);
		
		JLabel lblTitulo = new JLabel("Loca\u00E7\u00E3o de Filmes");
		lblTitulo.setFont(new Font("Tahoma", Font.BOLD, 20));
		lblTitulo.setBounds(163, 34, 200, 50);
		cadastro.add(lblTitulo);
		
		lblCodigoFilme = new JLabel("C\u00F3digo do Filme:");
		lblCodigoFilme.setBounds(58, 143, 107, 26);
		cadastro.add(lblCodigoFilme);
		
		codigo_filme = new JTextField();
		codigo_filme.setBounds(165, 146, 211, 20);
		cadastro.add(codigo_filme);
		codigo_filme.setColumns(10);
		
		codFuncionario = new JLabel("C\u00F3digo do Funcion\u00E1rio:");
		codFuncionario.setBounds(34, 184, 142, 26);
		cadastro.add(codFuncionario);
		
		codigo_funcionario = new JTextField();
		codigo_funcionario.setColumns(10);
		codigo_funcionario.setBounds(165, 187, 211, 20);
		cadastro.add(codigo_funcionario);
		
		codCliente = new JLabel("C\u00F3digo do Cliente:");
		codCliente.setBounds(58, 225, 107, 26);
		cadastro.add(codCliente);
		
		preenche();
		codigo_cliente = new JTextField();
		codigo_cliente.setColumns(10);
		codigo_cliente.setBounds(165, 228, 211, 20);
		cadastro.add(codigo_cliente);
		
		dtLocacao = new JLabel("Data de Loca\u00E7\u00E3o:");
		dtLocacao.setBounds(58, 266, 107, 26);
		cadastro.add(dtLocacao);
		
		MaskFormatter frmdtLo = new MaskFormatter("##/##/####");
		dt_locacao = new JFormattedTextField(frmdtLo);
		dt_locacao.setColumns(10);
		dt_locacao.setBounds(165, 269, 211, 20);
		cadastro.add(dt_locacao);
		
		
		dtDevolucao = new JLabel("Data de Devolu\u00E7\u00E3o:");
		dtDevolucao.setBounds(41, 308, 135, 26);
		cadastro.add(dtDevolucao);
		
		MaskFormatter frmdtDe = new MaskFormatter("##/##/####");
		dt_devolucao = new JFormattedTextField(frmdtDe);
		dt_devolucao.setColumns(10);
		dt_devolucao.setBounds(165, 311, 211, 20);
		cadastro.add(dt_devolucao);
		
		JButton btnSalvar = new JButton("Salvar");
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				salvar();
				

				popularTabela(linha, null, -1);
			}
		});
		btnSalvar.setBounds(139, 380, 89, 23);
		cadastro.add(btnSalvar);
		
		JButton btnLimpar = new JButton("Limpar");
		btnLimpar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		btnLimpar.setBounds(274, 380, 89, 23);
		cadastro.add(btnLimpar);
		
		 cbCodigo = new JComboBox();

		
		
		cbCodigo.setBounds(191, 115, 160, 20);
		cadastro.add(cbCodigo);

		
		listagem = new JPanel();
		listagem.setBackground(Color.WHITE);
		tabbedPane.addTab("Listagem", null, listagem, null);
		listagem.setLayout(null);
		
		dadosTabela();
		JScrollPane scrollPane = new JScrollPane(tabela);
		scrollPane.setBounds(0, 88, 481, 303);
		listagem.add(scrollPane);
		
		JPanel panel_1 = new JPanel();
		panel_1.setLayout(null);
		panel_1.setBackground(Color.LIGHT_GRAY);
		panel_1.setBounds(62, 402, 339, 72);
		listagem.add(panel_1);
		
		JButton button = new JButton("Editar");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				tabbedPane.setSelectedIndex(0);
				
				// Variável responsável por capturar a linha selecionada
				int linhaSelecionada = -1;
				// Busca a linha selecionada e armazena na variável
				// linhaSelecionada
				linhaSelecionada = tabela.getSelectedRow();

				// Validar se uma linha foi selecionada
				if (linhaSelecionada >= 0) {
					// Armazena a informação da primeira coluna da linha
					// selecionada
					int codigoLocacao = (int) tabela.getValueAt(linhaSelecionada, 0);
					
				buscarLocacao(codigoLocacao);
				} else {
					JOptionPane.showMessageDialog(null, "Selecione uma " + "linha para alterar a Locação!");
				}
			}
		});
		button.setBounds(31, 11, 135, 23);
		panel_1.add(button);
		
		JButton button_1 = new JButton("Excluir");
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int linhaSelecionada = -1;
				// Busca a linha selecionada e armazena na variável
				// linhaSelecionada
				linhaSelecionada = tabela.getSelectedRow();

				// Validar se uma linha foi selecionada
				if (linhaSelecionada >= 0) {
					// Armazena a informação da primeira coluna da linha
					// selecionada
					int codigoLocacao = (int) tabela.getValueAt(linhaSelecionada, 0);
					

					// Ação do botão excluir
					excluir(codigoLocacao);
				} else {
					JOptionPane.showMessageDialog(null, "Selecione uma " + "linha para excluir a locação!!");
				}
				
			}
		});
		button_1.setBounds(186, 11, 135, 23);
		panel_1.add(button_1);
		
		JButton button_2 = new JButton("Sair");
		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				sair();
			}
		});
		button_2.setBounds(104, 49, 135, 23);
		panel_1.add(button_2);
		
		JPanel panel_2 = new JPanel();
		panel_2.setLayout(null);
		panel_2.setBackground(Color.LIGHT_GRAY);
		panel_2.setBounds(0, 34, 481, 43);
		listagem.add(panel_2);
		
		JLabel label = new JLabel("Filtrar por: ");
		label.setBounds(10, 11, 67, 21);
		panel_2.add(label);
		
		 cbFiltro = new JComboBox();
		cbFiltro.setModel(new DefaultComboBoxModel(new String[] {"C\u00F3digo do Filme", "C\u00F3digo da loca\u00E7\u00E3o"}));
		cbFiltro.setBounds(66, 11, 104, 20);
		panel_2.add(cbFiltro);
		
		txtPesquisa = new JTextField();
		txtPesquisa.setColumns(10);
		txtPesquisa.setBounds(172, 11, 193, 20);
		panel_2.add(txtPesquisa);
		
		JButton button_3 = new JButton("Pesquisar");
		button_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String textoPesquisa = txtPesquisa.getText();
				Integer tipoPesquisa = cbFiltro.getSelectedIndex();
				
				popularTabela(linha, textoPesquisa, tipoPesquisa);
				 JOptionPane.showMessageDialog(null, "Tipo: "+tipoPesquisa);
				
			}
		});
		button_3.setBounds(375, 10, 96, 23);
		panel_2.add(button_3);

	}
	
	protected void buscarLocacao(int codigoLocacao) {
		control.Locacao locacao = new control.Locacao();
		 for (Locacao loc : locacao.listarLocacao(codigoLocacao + "", 1)) {
			 codigo_filme.setText(loc.getCodigo_filme());
			 codigo_funcionario.setText(loc.getCodigo_funcionario());
			 codigo_cliente.setText(loc.getCodigo_cliente());
			 dt_locacao.setText(loc.getDt_locacao());
			 dt_devolucao.setText(loc.getDt_devolucao());
			 
			 codigoEditar= loc.getId_locacao();
		
	}
		    cadastro.setVisible(true);
			listagem.setVisible(false);
}
	protected void excluir(int codigoLocacao) {
		int indexNOK = JOptionPane.YES_NO_OPTION;
		int mensagem = JOptionPane.showConfirmDialog(null,
				"Você tem certeza que deseja " + "deletar a locacao: " + " ?", "Aviso!!!", indexNOK);
		// Validar se for clicado em excluir o usuário
		if (mensagem == JOptionPane.YES_OPTION) {

			control.Locacao locacao = new control.Locacao();
			locacao.excluir(codigoLocacao);

			// atualizar tabela
			popularTabela(linha, null, -1);
		}

		
	}

	private void dadosTabela() {
		 tabela = new JTable(linha);

			linha.addColumn("Código da Locação");
			linha.addColumn("Código do filme");
			linha.addColumn("Código do Funcionario");
			linha.addColumn("Código do cliente");
			linha.addColumn("Data de Locação");
			linha.addColumn("Data de Devolução");
			
			popularTabela(linha, null, -1);
		
	}
	
	private void popularTabela(DefaultTableModel linha, String textoPesquisa, Integer tipoPesquisa) {
		control.Locacao locacao = new control.Locacao();
		
		linha.setNumRows(0);
		
		// Retornar valores para mostrar na tabela
		for (Locacao loc : locacao.listarLocacao(textoPesquisa, tipoPesquisa)) {

			linha.addRow(new Object[] {

					loc.getId_locacao(), loc.getCodigo_filme(), loc.getCodigo_funcionario(), loc.getCodigo_cliente(), loc.getDt_locacao(), loc.getDt_devolucao() });

		}
			
		}
		

	protected void salvar(){
		String cod_filme = codigo_filme.getText();
		String cod_funcionario= codigo_funcionario.getText();
		String cod_cliente = codigo_cliente.getText();
		String data_locacao = dt_locacao.getText();
		String data_devolucao = dt_devolucao.getText();
		if(cod_filme.equals("")&& cod_funcionario.equals("")&&cod_cliente.equals("")&&data_locacao.equals("")){
			JOptionPane.showMessageDialog(null, "Preencha os campos");
			
		}else if(data_devolucao.equals("")){
			JOptionPane.showMessageDialog(null, "O campo Data de devolução é Obrigatório!");
			
			
		}
		Locacao locacao = new Locacao();
		locacao.setCodigo_cliente(cod_cliente);
		locacao.setCodigo_funcionario(cod_funcionario);
		locacao.setCodigo_filme(cod_filme);
		locacao.setDt_locacao(data_locacao);
		locacao.setDt_devolucao(data_devolucao);
		
		control.Locacao manutencao = new control.Locacao();
		if(codigoEditar == 0){
			manutencao.inserir(locacao);
		
		}else{
			manutencao.alterar(locacao);
		}
	
		tabbedPane.setSelectedIndex(1);
		
		
		
	}
	
	protected void sair(){
		 this.dispose();  
        JFramePrincipal principal  = new JFramePrincipal();
        principal.setVisible(true);
	}
	
	public void preenche(){
		java.sql.Connection conn = null;
		// Variável responsável por preparar a execução da query
		java.sql.PreparedStatement pstm = null;
		// Variável responsável por receber o retorno das informações
		// consultadas
		ResultSet rs = null;
	
		
		try{
				conn = ConnectDB.conexaoDB();
		

		
			pstm = conn.prepareStatement(SELECT_FILME);			
			rs = pstm.executeQuery();
			
			while(rs.next()){
			
			cbCodigo.addItem(rs.getString("codigo_filme"));

				
			}
			
			
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null, "Ocorreu um erro "+ e.getMessage()+ e.getErrorCode()+ e.getSQLState()+e.getLocalizedMessage());
			e.printStackTrace();
		}
		
	}
}

Executa essa consulta direto no banco também… Vê se retorna resultados (com a coluna codigo_filme diferente de null)

retorna sim

Você fez o lance de printar no console ao invés de popular no combo?

System.out.println(rs.getString("codigo_filme"));

Como eu faria isso, eu sou iniciante em java

Consegui, ele aparece no terminal o código dos filmes

Mas não consigo fazer para popular no comboBox

Troque o seu método preenche por esse:

public void preenche() {
	java.sql.Connection conn = null;
	java.sql.PreparedStatement pstm = null;
	ResultSet rs = null;
	List<String> resultados = new ArrayList<String>();
	//importe a classe java.util.List

	try {
		conn = ConnectDB.conexaoDB();
		pstm = conn.prepareStatement(SELECT_FILME);			
		rs = pstm.executeQuery();

		while(rs.next()){
			resultados.add(rs.getString("codigo_filme"));
		}
		
		cbCodigo = new JComboBox(resultados.toArray());
	} catch(SQLException e) {
		JOptionPane.showMessageDialog(null, "Ocorreu um erro "+ e.getMessage()+ e.getErrorCode()+ e.getSQLState()+e.getLocalizedMessage());
		e.printStackTrace();
	}
	
}

Veja se funciona.
Não esqueça de adicionar import java.util.List na seção de imports da sua classe!

Não funcionou :sweat:

agora ele me dá um erro que a coluna não existe mas no erro ele aponta a coluna com o valor, e eu fui checar no banco e tem essa coluna com o valor 1.

protected void preenche() { java.sql.Connection conn = null; java.sql.PreparedStatement pstm = null; ResultSet rs = null; List<String> resultados = new ArrayList<String>(); //importe a classe java.util.List

	try {
		conn = ConnectDB.conexaoDB();
		pstm = conn.prepareStatement(SELECT_FILME);			
		rs = pstm.executeQuery();

		while(rs.next()){
			   String cod = rs.getString("codigo_filme");
			resultados.add(rs.getString(cod));
		}
		
		cbC = new JComboBox(resultados.toArray());
	} catch(SQLException e) {
		JOptionPane.showMessageDialog(null, "Ocorreu um erro "+ e.getMessage()+ e.getErrorCode()+ e.getSQLState()+e.getLocalizedMessage());
		e.printStackTrace();
	}
	


`}`

Substitua seu while por esse:

while(rs.next()){
    esultados.add(rs.getString("codigo_filme"));
}

Mudei mas agora não acontece nada, nem o erro, e nem preenche o JcomboBox

Se método deu certo, eu estava chamando ele no lugar errado, obrigado