Retornar erro de outra classe

12 respostas
pro_websis

Boa tarde pessoal preciso de uma ajudunha de vcs
tipo tenho uma classe principal q estende para um JFrame, e tem uma outra classe tbem chamada banco q faz a conexão com o mysql e faz as inserções no banco

estou fazendo da seguinte forma na classe principal

Banco b = new Banco(“java”);

ai acesso um metodo para insersão de dados

b.inserir(“insert into …”);

dentro desse metodo da classe banco queria modificar o jlabel da classe principal declarado como public( retornar um erro no caso)

tentei colocar na classe banco um extends Principal depois colocar o comando

this.erro.setText(inserção);

não da erro mais não acontece nada

ou talvez o metodo inserir da classe banco teria q retornar uma string para classe principal, mas não sei como fazer

12 Respostas

hugofcampos

Você tentou colocar try/catch no método que insere a informação no banco? Algo como:

catch(SQLException e){ e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); }

Se você puder posta o código pra gente… ajuda! :slight_smile:

P

Velho, NUNCA faça o que você está fazendo. Pois se tiver 230000 instâncias do teu programa, você vai abrir 230000 conexões.

Na classe de conexão, você coloca a criação de uma conexão como estática e um método pra retornar a conexão. Beleza?

P

PS: Se quiser gerar erros de uma forma um pouco mais profissional, use o log4j.

valeu.

pro_websis

Bom Pessoal o problema não se tah inserindo ou não bom de uma olhada no codigo

esse método eh da classe principal

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {

Object o = evt.getSource();
	
if (o == btnIncluir){
    
        Banco b = new Banco("java");
        
        String nom = nome.getText();
        String tel = telefone.getText();
        String idad = idade.getText();
        String end = endereco.getText();
        String cidad = cidade.getText();
        String query = "insert into cliente(nome, telefone, idade, endereco, cidade) values(\""+nom+"\", \""+tel+"\", "+idad+", \""+end+"\", \""+cidad+"\");";
        System.out.println(query);

        // aqui eh a chamada para inserção 

        b.inserir(query);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

esse eh o jlabel q eu quero que apareça o erro mais teria q ser acessado da classe banco
         ou o metodo inserir retornar uma string, ou pode retornar uma string tipo return string mensagem mais tbem não consegui
         Me ajudem sou iniciante em java
         
         erro.setText("Cadastro Efetuado com sucesso !!");

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

nome.setText("");
        idade.setText("");
        telefone.setText("");
        endereco.setText("");
        cidade.setText("");
}

}

inicio da classe banco

package Agenda;

import java.sql.*;

import java.util.ArrayList;

import java.util.List;

import javax.swing.table.DefaultTableModel;

public class Banco extends Principal{

private Connection connection;
private Statement command;
private ResultSet resultSet;
    
public Banco(String banco){
	try{
		//para o MySQL 3.23.51
		// baixar driver mais atual para outras verses do MySQL
		Class.forName("com.mysql.jdbc.Driver").newInstance();
		connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+banco,"root","");
	}
	catch(ClassNotFoundException cnfex){
		System.err.println("Driver jdbc/odbc failed...");
		cnfex.printStackTrace();
		System.exit(1);
	}
	catch (SQLException sqlex){ 
		System.err.println("Impossible to connect...");
		sqlex.printStackTrace();
	}
	catch (InstantiationException ie){}
	catch (IllegalAccessException iae){}

}

public void inserir(String query){
	
	try{
		command = connection.createStatement();
		int result = command.executeUpdate(query);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

aqui estou tentando acessar o JLabel da classe principal mais não certo não da erro mais 
                                            não seta nenhum conteúdo, por isso tentei estender essa classe para principal
                                            ou colocar um return como já disse, o q acham?

                                           this.erro.setText("Cadastro Efetuado com sucesso !!");

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

command.close();
	}catch (SQLException sqlex){

                                            sqlex.printStackTrace();
	}
}

public static void main(String[] args){
	System.out.println("arg: ");
	new Banco(args[0]);
}

}

pro_websis

Pessoal lembrando q estou iniciando agora com o java faz umas 2 semanas

renatocustodio

coloca seu código entre as tags [ code ] [/ code ] sem espaço que fica melhor para o pessoal analisar.

pro_websis

Bom Pessoal o problema não se tah inserindo ou não bom de uma olhada no codigo

esse método eh da classe principal

[ code ]

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {

Object o = evt.getSource();

if (o == btnIncluir){

Banco b = new Banco(“java”);

String nom = nome.getText();

String tel = telefone.getText();

String idad = idade.getText();

String end = endereco.getText();

String cidad = cidade.getText();

String query = insert into cliente(nome, telefone, idade, endereco, cidade) values("+nom+"", “”+tel+"", “+idad+”, “”+end+"", “”+cidad+"");";

System.out.println(query);

// aqui eh a chamada para inserção

b.inserir(query);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

esse eh o jlabel q eu quero que apareça o erro mais teria q ser acessado da classe banco
ou o metodo inserir retornar uma string, ou pode retornar uma string tipo return string mensagem mais tbem não consegui
Me ajudem sou iniciante em java

erro.setText(“Cadastro Efetuado com sucesso !!”);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

nome.setText("");

idade.setText("");

telefone.setText("");

endereco.setText("");

cidade.setText("");

}

}

[/ code ]

inicio da classe banco

[ code ]
package Agenda;

import java.sql.*;

import java.util.ArrayList;

import java.util.List;

import javax.swing.table.DefaultTableModel;

public class Banco extends Principal{

private Connection connection;

private Statement command;

private ResultSet resultSet;
public Banco(String banco){

try{

//para o MySQL 3.23.51

// baixar driver mais atual para outras verses do MySQL

Class.forName(“com.mysql.jdbc.Driver”).newInstance();

connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/+banco,root,"");

}

catch(ClassNotFoundException cnfex){

System.err.println(“Driver jdbc/odbc failed…”);

cnfex.printStackTrace();

System.exit(1);

}

catch (SQLException sqlex){

System.err.println(“Impossible to connect…”);

sqlex.printStackTrace();

}

catch (InstantiationException ie){}

catch (IllegalAccessException iae){}

}

public void inserir(String query){

try{

command = connection.createStatement();

int result = command.executeUpdate(query);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

aqui estou tentando acessar o JLabel da classe principal mais não certo não da erro mais
não seta nenhum conteúdo, por isso tentei estender essa classe para principal
ou colocar um return como já disse, o q acham?

this.erro.setText(“Cadastro Efetuado com sucesso !!”);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

command.close();
}catch (SQLException sqlex){

sqlex.printStackTrace();

}

}
public static void main(String[] args){

System.out.println("arg: ");

new Banco(args[0]);

}

}

[/ code ]

assim?

pro_websis
testes teste testestes
ajnlakjn ljnaljna  ljna
pro_websis

Bom Pessoal o problema não se tah inserindo ou não bom de uma olhada no codigo

esse método eh da classe principal

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) { 

Object o = evt.getSource(); 

if (o == btnIncluir){ 

Banco b = new Banco("java"); 

String nom = nome.getText(); 
String tel = telefone.getText(); 
String idad = idade.getText(); 
String end = endereco.getText(); 
String cidad = cidade.getText(); 
String query = "insert into cliente(nome, telefone, idade, endereco, cidade) values(\""+nom+"\", \""+tel+"\", "+idad+", \""+end+"\", \""+cidad+"\");"; 
System.out.println(query); 

// aqui eh a chamada para inserção 

b.inserir(query); 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

esse eh o jlabel q eu quero que apareça o erro mais teria q ser acessado da classe banco 
ou o metodo inserir retornar uma string, ou pode retornar uma string tipo return string mensagem mais tbem não consegui 
Me ajudem sou iniciante em java 

erro.setText("Cadastro Efetuado com sucesso !!"); 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

nome.setText(""); 
idade.setText(""); 
telefone.setText(""); 
endereco.setText(""); 
cidade.setText(""); 
} 
}

inicio da classe banco

package Agenda; 

import java.sql.*; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.table.DefaultTableModel; 

public class Banco extends Principal{ 

private Connection connection; 
private Statement command; 
private ResultSet resultSet; 

public Banco(String banco){ 
try{ 
//para o MySQL 3.23.51 
// baixar driver mais atual para outras verses do MySQL 
Class.forName("com.mysql.jdbc.Driver").newInstance(); 
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+banco,"root",""); 
} 
catch(ClassNotFoundException cnfex){ 
System.err.println("Driver jdbc/odbc failed..."); 
cnfex.printStackTrace(); 
System.exit(1); 
} 
catch (SQLException sqlex){ 
System.err.println("Impossible to connect..."); 
sqlex.printStackTrace(); 
} 
catch (InstantiationException ie){} 
catch (IllegalAccessException iae){} 

} 

public void inserir(String query){ 

try{ 
command = connection.createStatement(); 
int result = command.executeUpdate(query); 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

aqui estou tentando acessar o JLabel da classe principal mais não certo não da erro mais 
não seta nenhum conteúdo, por isso tentei estender essa classe para principal 
ou colocar um return como  disse, o q acham? 

this.erro.setText("Cadastro Efetuado com sucesso !!"); 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

command.close(); 
}catch (SQLException sqlex){ 

sqlex.printStackTrace(); 
} 
} 

public static void main(String[] args){ 
System.out.println("arg: "); 
new Banco(args[0]); 
} 
}

agora sim

P

Cara, tentei, tentei mas não consegui entender a sua dúvida.

Outra coisa, quem diabos é ERRO? Pode ser um JLabel, mas aonde você instanciou ele?

Teu código não está bom por uma série de coisas. Dá uma lida sobre Singleton. Beleza?

valeu.

pro_websis

então não vou postar a classe principal pq eh muito grande ou eh melhor postar junto? mais eu coloquei uma descrição melhor do JLabel erro na função inserir da classe banco

eh simplesmente um Jlabel com o nome erro da classe principal mais so postei um método nos outros posts e eu quero altera-lo com o comando erro.setText(" erro bla bla bla bla ou mensagem de sucesso");

dentro da segunda classe chamada banco q instanciei e chamei o método inserir

ha e eu tbem vou ler a respeito do Singleton

B

Singleton? Deveria dar uma olhada em separação de responsabilidades, e MVC principalmente.

Com classe spaguetti assim é difícil conseguir fazer qualquer coisa, o ideal é uma série de classes p/ controlar a apresentação com swing/awt, outra série que controlaria os cálculos da aplicação, e outras p/ lidar com o banco. Do contrário você acaba com uma classe gigante que mal consegue entender e modificar.

Criado 23 de junho de 2008
Ultima resposta 24 de jun. de 2008
Respostas 12
Participantes 5