Onde está o erro?

20 respostas
M

Galera, fiz uma conexão do java com o sql server, via odbc, junto com uma interface, mas consigo inserir dados, porém não consultar. Queria que os dados aparecessem. Me digam onde está o erro:

public void actionPerformed(ActionEvent evt){

Object obj = evt.getSource();
       if(obj==btnSalvar){
       	Conexao conex = new Conexao();
       	conex.Insert("INSERT INTO Produto values ('"+tfcod.getText()+"', '"+tfnome.getText()+"', '"+tfcapacitancia.getText()+"', '"+tfcapacidade.getText()+"', '"+tfdt_aq.getText()+"', '"+tfdt_val.getText()+"', '"+tfqtd.getText()+"', '"+tfqtd_min.getText()+"', '"+tfqtd_max.getText()+"', '"+tfval.getText()+"')");
		JOptionPane.showMessageDialog(null, "Dados inseridos","Insercao", JOptionPane.PLAIN_MESSAGE);
		tfnome.setText("");
		tfcapacitancia.setText(""); 
		tfcapacidade.setText(""); 
		tfdt_aq.setText(""); 
 		tfdt_val.setText(""); 
	    tfqtd.setText(""); 
	    tfqtd_max.setText(""); 
		tfqtd_min.setText(""); 
		tfval.setText(""); 
    
       }
    if(obj==btnCancelar){
    	
    	setVisible(false);
    
       }   
       if(obj==btnConsultar){
    	Conexao conex = new Conexao();
    	conex.Consult("SELECT * FROM Produto");
    	JOptionPane.showMessageDialog(null, +query", "Consulta", JOptionPane.PLAIN_MESSAGE);
    	
    
       }</blockquote>

Lembrando q no meu arquivo pra fazer a conexão, está:

public void Insert(String query){

try{
		statement.executeUpdate(query);

	}catch(SQLException sqlException){

		sqlException.printStackTrace();
		System.exit(1);

	}
}
public void Delete(String query){

	try{
		statement.executeUpdate(query);

	}catch(SQLException sqlException){

		sqlException.printStackTrace();
		System.exit(1);

	}
}
	public void Alter(String query){

		try{
			statement.executeUpdate(query);

		}catch(SQLException sqlException){

			sqlException.printStackTrace();
			System.exit(1);

		}
}
	public void Consult(String query){

		try{
			statement.executeUpdate(query);

		}catch(SQLException sqlException){

			sqlException.printStackTrace();
			System.exit(1);

		}
}</blockquote>

Mas não sei o q colocar pra aparecer os dados da tabela :frowning:

20 Respostas

E

procure sobre o método executeQuery para realizar consultas

M

procurei, mas continuei sem entender. pq eu queria jogar o resultado numa janela gráfica.

S

eu sempre realizo queries de consulta assim

Statement stmt = conex.createStatement&#40;&#41;;
	ResultSet rs = stmt.executeQuery&#40;"select * from tb_cidade"&#41;;

onde o objeto ResultSet, contem o resultado da pesquisa…

while&#40;rs.next&#40;&#41;&#41; &#123; sysout&#40;rs.getString&#40;&quot;NOME&quot;&#41;&#41;; // imprimindo o nome da cidade retornado na pesquisa &#125; [/quote]

M

creio q nesse caso, seria se fosse uma interface de texto. mas eu preciso jogar o resultado numa janela grafica.

resumindo, como eu faria pra um JTextField armazenar o resultado de uma consulta sql? pq assim, eu poderia criar uma janela com todos os campos da tabela,

então, tfcapacidade.setText() armazenaria o resultado da instrução do tipo select capacidade from produto where (nome = margarina)

tfval.setText() armazenaria

select valor from produto where (nome = margarina)

assim, eu poderia colocar a instrução, tb num jtextfield (“entre com o nome do produto para consultar)”, e qd o usuario digitasse margarina, e clikasse no botão consultar, eu colocaria como evento desse botão jogar nos campos jtextfield os resultados do banco de dados

M

por exemplo, vejam o código que estou agora. mas tá dando erro:

<blockquote>import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.*;
import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;
public class ConsultaItem extends JFrame implements ActionListener{

private JTextField tfcodigo;

private JLabel lbcodigo;	

private JButton btnConsultar;

private JButton btnCancelar;
private JTextField tfi_cod;
private JTextField tfnf;
private JTextField tfp_cod;
private JTextField tfqtd;
private JTextField tfval;

private JLabel lbi_cod;
private JLabel lbnf;
private JLabel lbp_cod;
private JLabel lbqtd;
private JLabel lbval;
public ConsultaItem(){

setTitle(Consulta de Itens);

setSize (750,400);

setLocationRelativeTo(null);

tfcodigo = new JTextField(4);

lbcodigo = new JLabel(Digite o codigo do produto que deseja consultar);

btnConsultar = new JButton(Consultar);

btnCancelar = new JButton(Cancelar/Sair);
tfi_cod = new JTextField(8);
tfnf = new JTextField(10);
tfp_cod = new JTextField(8);
tfqtd = new JTextField(5);
tfval = new JTextField(10);
	
lbi_cod = new JLabel("Codigo do Item");
lbnf = new JLabel("Nota Fiscal");
lbp_cod = new JLabel("Codigo do Produto");
lbqtd = new JLabel("Quantidade");
lbval = new JLabel("Valor do Item");

setLayout(new FlowLayout());
add(lbcodigo);add(tfcodigo);add(btnConsultar);add(lbi_cod);add(tfi_cod);add(lbnf);add(tfnf);add(lbp_cod);add(tfp_cod);
add(lbqtd);add(tfqtd);add(lbval);add(tfval);add(btnCancelar);
btnConsultar.addActionListener(this);
btnCancelar.addActionListener(this);
setVisible(true);

}

public void actionPerformed(ActionEvent evt){

Object obj = evt.getSource();
       if (obj==btnConsultar){
       Conexao conex = new Conexao();
       conex.Consult("SELECT * FROM Item WHERE i_cod values ('"+tfcodigo.getText()+"')");
       }
       if (obj==btnCancelar){
       	setVisible(false);
       }
}

public static void main(String args[]){

new ConsultaItem();

}

}

S

cara você pode fazer de varias maneiras

seu metodo de consulta pode retornar um resultset e você montar sua interface:

nome_do_compomente.setText&#40;rs.getString&#40;"NOME_DO_CAMPO"&#41;&#41;;

e só você escolher como implementar agora…

M

Suelmar, mt obrigado por estar colaborando. creio q com sua ajuda eu vou conseguir. bem, é justamente na implementação q não estou tendo idéias. seguinte, vou te passar meu código de conexão:

<blockquote>import javax.swing.JOptionPane;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.Statement;

import java.sql.SQLException;

public class Conexao{

private static Connection conn;
private static String url;
private static String usuario;
private static String senha;

Statement statement;
Connection connection;


public Conexao(){

	url = "jdbc:odbc:Teste";
	usuario = "desenv";
	senha = "123456";

	try{

		this.connection = null;
		this.statement = null;

		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

		connection = DriverManager.getConnection(url, usuario, senha);
		statement = connection.createStatement();
		System.out.println("Conectando ao Banco de Dados: "+url);
		System.out.println("Conexao ativada");
		

	}catch(SQLException sqlException){
		System.out.println("Conexao Impossivel - Erro: "+sqlException );
		sqlException.printStackTrace();
		System.exit(1);

	}catch(ClassNotFoundException classNotFoundException){

		System.out.println("Conexao Impossivel - Nao encontrou o Drivers do Banco de Dados "+ classNotFoundException);
		classNotFoundException.printStackTrace();
		System.exit(1);

	}

}


public void Insert(String query){

	try{
		statement.executeUpdate(query);

	}catch(SQLException sqlException){

		sqlException.printStackTrace();
		System.exit(1);

	}
}
public void Delete(String query){

	try{
		statement.executeUpdate(query);

	}catch(SQLException sqlException){

		sqlException.printStackTrace();
		System.exit(1);

	}
}
	public void Alter(String query){

		try{
			statement.executeUpdate(query);

		}catch(SQLException sqlException){

			sqlException.printStackTrace();
			System.exit(1);

		}
}

[b] public void Consult(String query){

try{
			statement.executeUpdate(query);
			

		}catch(SQLException sqlException){

			sqlException.printStackTrace();
			System.exit(1);

		}
}[/b]
//fecha a conexao
public void fechaConexao(){

	try{

		this.connection.close();
		this.statement.close();
	}catch(Exception exception){

		exception.printStackTrace();
		System.exit(1);

	}

}

public static void main (String args[]){
		new Conexao();
		JOptionPane.showMessageDialog(null, "Conexao ativada","Ativar", JOptionPane.PLAIN_MESSAGE);
}

}

Talvez, o método consult, não precise ser igual o Insert. agora veja como está no código no momento.

public void actionPerformed(ActionEvent evt){

Object obj = evt.getSource();
       if (obj==btnConsultar){
       Conexao conex = new Conexao();
       conex.Consult("SELECT * FROM Item");
       tfi_cod.setText(rs.getString("I_COD"));

       }</blockquote>

dá o erro: 'cannot find simble variable rs

onde eu tenho q mudar? sei q é uma coisinha à toa, mas não consigo perceber[/b]

L

Tá, vamos la…

Cara, consultas vc faz no banco usando o método executeQuery.
Ler http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=4529
http://www.guj.com.br/posts/list/51258.java

Esse método retorna um objeto chamado ResultSet que é o resultado da pesquisa no banco.
Ler:
http://java.sun.com/j2se/1.5.0/docs/api/java/sql/ResultSet.html

Vc pega esse objeto e interage, cada linha é um registro da consulta, e com isso vc popula sua tela como o pessoal falou la encima…

Seu erro:
Cade a declaração do objeto rs?! que é o resultset?! porque seu método consult retorna void?! vc ja viu um método de consulta retornando nada!? faz o que o pessoal disse, executa executeQuery na consulta e retorna o resultset… interage esse resultset e popula a tela…

Algumas alterações:

public ResultSet consult&#40;String query&#41; &#123;
		try &#123;
			return statement.executeQuery&#40;query&#41;;
		&#125; catch &#40;SQLException sqlException&#41; &#123;
			sqlException.printStackTrace&#40;&#41;;
			System.exit&#40;1&#41;;
		&#125;
	&#125;
public void actionPerformed&#40;ActionEvent evt&#41; &#123;
		Object obj = evt.getSource&#40;&#41;;
		if &#40;obj == btnConsultar&#41; &#123;
			Conexao conex = new Conexao&#40;&#41;;
			ResultSet rs = conex.consult&#40;"SELECT * FROM Item"&#41;;
			if &#40;rs.next&#40;&#41;&#41; &#123;
				tfi_cod.setText&#40;rs.getString&#40;"I_COD"&#41;&#41;;
			&#125;
		&#125;
	&#125;
M

ok, no momento está assim, dando uma mensagem de erro
Conexao:

[b]public void Consult_item(){

try{
			Statement conItem = connection.createStatement();
			ResultSet rs = conItem.executeQuery ("SELECT * FROM Item");
			
			

		}catch(SQLException sqlException){

			sqlException.printStackTrace();
			System.exit(1);

		}[/b]</blockquote>

ConsultaItem:

public void actionPerformed(ActionEvent evt){

Object obj = evt.getSource();
       if (obj==btnConsultar){
       Conexao conex = new Conexao();
       conex.Consult_item();
       tfi_cod.setText(rs.getString("I_COD"));

       }</blockquote>

sinto q estou batendo na trave, mas alguma coisa não funciona. aparece:
cannot find simbol method getString(java. lang. string

L

Na real acho que vc não esta tentando entender a logica do negocio… vc continua sem declarar a variavel rs dentro de actionPerformed, e seu sql é select * from tabela, porque vc acha que esse sql vai te retornar uma String?! só pelo * ja da para saber que vai retornar varias colunas… se vc declara que consult retorna uma string, vc vai ter que retornar uma string, só que vc acha que uma string pode representar uma busca no banco de dados?! não né… o retorno tem que ser ResultSet… esse ResultSet é um objeto que vai guardar o resultado da sua pesquisa, e ai vc vai ter que buscar dentro dele o que vc quer, ai que vem o resultset.getString, resultset.getInt, etc…

olha o código que eu postei (editado) no meu post anterior… tenta entender…

M

ok, colega, estou pegando a lógica. realmente eu estava no caminho errado. agora ficou:
Conexao:

<blockquote>		public ResultSet consult(String query) {

try {

return statement.executeQuery(query);

}

catch (SQLException sqlException) {

sqlException.printStackTrace();

System.exit(1);

}

}</blockquote>

Consulta de Itens:

[b] public void actionPerformed(ActionEvent evt){

Object obj = evt.getSource();
    	if (obj == btnConsultar) {
     		Conexao conex = new Conexao();
     		ResultSet rs = conex.consult("SELECT * FROM Item");
     	if (rs.next()) {
        	tfi_cod.setText(rs.getString("I_COD"));
     	}
  		} 
       	if (obj==btnCancelar){
       		setVisible(false);
       	}

}[/b]

Ao compilar o arquivo conexão, aparece : ‘missing return statement’, na linha da ultima chave do método, a q fecha o public ResultSet.

Ao compilar o arquivo consulta item, aparece: '
cannot find simbol class ResultSet…

:cry:

P

cara…faz assim:

public ResultSet consult&#40;String query&#41; &#123; 
    ResultSet rs = null;
    try &#123; 
        rs =  statement.executeQuery&#40;query&#41;; 
    &#125; catch &#40;SQLException sqlException&#41; &#123; 
        sqlException.printStackTrace&#40;&#41;; 
        System.exit&#40;1&#41;; 
    &#125;
    return rs;
&#125;

ainda não esta o melhor dos mundos…mas blz…pelo menos mata seu erro…

cara, um conselho, vai aprender umas coisas mais simples primeiro…vc esta dando um passo maior q as pernas…

flw

M

O q acontece é q meu professor de java deu esse trabalho. e pra ele não importa se não foi nos passado o conhecimento necessário. ele quer é o trabalho feito. bom, com a alteração, o arquivo conexão compilou normal.
mas o arquivo consultaitem continua dando o erro ‘cannot find symbol class ResultSet’…

S

Você chegou a facer o import da interface ResultSet???

import java.sql.ResultSet;

O erro pode ser este, senão foi posta seu codigo ai para a gente dar uma olhada… mas deve ser isso mesmo…

P

vc fez o import de java.sql.ResultSet na classe consultaitem???

M

Fiz o import agora, e resolveu por este lado, mas deu um outro erro,

public void actionPerformed(ActionEvent evt){

Object obj = evt.getSource();
    	if (obj == btnConsultar) {
      		Conexao conex = new Conexao();
     		ResultSet rs = conex.consult("SELECT * FROM Item");
     	[b]if (rs.next()) {
        	tfi_cod.setText(rs.getString("I_COD"));[/b]
     	}
  		} 
       	if (obj==btnCancelar){
       		setVisible(false);
       	}

}

Nas linhas em negrito, apareceu o erro: 'unreported exception java.sql.SQLException; must be caught or declared to be thrown’
o q pode ser isso??

M

pesquisei e coloquei um try-catch no meu método. e funcionou!!!

só tenho a agradecer a vcs pela boa vontade em ajudar. obrigado.

ps: vou continuar a fazer o programa, com os erros, volto aki, hehehe :lol:

M

galera, a questão agora é a seguinte.

<blockquote>        	if (obj == btnConsultar) {

Conexao conex = new Conexao();

ResultSet rs = conex.consult(SELECT * FROM Item);

try{
if (rs.next()) {
     	
     		
        	tfi_cod.setText(rs.getString("I_COD"));
        	tfnf.setText(rs.getString("V_NF"));
        	tfp_cod.setText(rs.getString("P_COD"));
        	tfqtd.setText(rs.getString("I_QUANTIDADE"));
        	tfval.setText(rs.getString("I_VALOR"));
        	}
     	}catch(Exception e){
     		e.printStackTrace();
     	} </blockquote>

o q acontece? qualquer numero q eu colocar no jtextfield codigo q eu criei, retorna o mesmo item. o q eu coloco entre os parenteses?

(“select * from item where p_cod = tfcodigo.getText()”) não deu certo…
tfcodigo é onde o usuario digita o numero pra clickar em consultar:cry:

S

O erro e o seguinte…

Você deveria concatenar o retorno do metodo getText() na string, dessa maneira…

ResultSet rs = conex.consult&#40;"select * from item where p_cod = " + tfcodigo.getTexte&#40;&#41;&#41;;

Da maneira como você vez, da até erro de sql…
Quando der um erro de sql assim, mande imprimir o sql usado, e rode no seu sgbd… que ai fica facil de saber o erro…

Recomendo um lidinha no livro do deitel, que para mim é o mais facil para iniciantes… tenta ai a modificação qq coisa posta ai denovo…

M

deu certo. obrigado pela dica. vou continar estudando e pesquisando sobre o java e conexão com sql. terminei o trabalho. o tópico tá resolvido.

Criado 1 de julho de 2007
Ultima resposta 5 de jul. de 2007
Respostas 20
Participantes 5