Importar dados de outra class

15 respostas
alexandremanowar

E ae galera blz

Eu fiz um class de conexão com o seguinte código:

/*
 * Conexao.java
 *
 * Created on 23 de Abril de 2007, 21:18
 */

package conexao;
import java.io.IOException;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 

 public class Conexao {
 	
 	private static String NAME	= "com.mysql.jdbc.Driver";
 	private static String URL	= "jdbc:mysql://localhost/test";
 	private static String LOGIN	= "root";
 	private static String PASS	= "";
 	
 	/**
 	 * 
 	 * @return Conexao.
 	 * @throws SQLException
 	 * @throws IOException
 	 */
 	public static Connection connect() throws SQLException, IOException {
 		
 		Connection con = null;
 		
 		try {
 			Class.forName(NAME);
 			con	= DriverManager.getConnection(URL, LOGIN, PASS);
 		} catch (ClassNotFoundException e) {
 			System.out.print("\nNão foi possível estabelecer conexão com a base de dados.\n");
 			e.printStackTrace();
 			return null;
 		}
 		return con;
 	}
 }

Testei ele em uma jsp e funcionou blz
Agora eu estou tentando fazer o seguinte, eu criei uma outra classe que é uma classe de validação a função dela é receber dados enviados por um form e consultar os dados em um banco para ver se existe (dependendo da resposta do banco ele vai redirecionar para um outro jsp com a resposta de negativo ou positivo), o único problema é que não sei como usar a conexão que eu fiz na classe acima em outra class, sei que tenho que importar mas como devo chamar a conexão, e fazer a consulta? O código de consulta eu sei fazer só não sei usar a conexão que já foi feita na outra classe.
Alguém poderia me explicar?

15 Respostas

C

Olá alexandre,

Se estiver no mesmo pacote não é necessário importar.
Para instanciar o Objeto, faça:

Conexao conexao = new Conexao();

Se estiver fora do pacote,

import conexao.Conexao;

Espero ter ajudado.

C

qualquer dúvida, posta suas classes pra gente ver.

sucesso.

alexandremanowar

E ae blz, valeu pela força

Então até aí eu sei chegar! O problema é que não sei fazer o código que faz a consulta. Olha como ficou a minha classe:

package validacao;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

 import java.io.IOException;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;


import conexao.Conexao;

/**
 *
 * @author alexandre
 * @version
 */
public class Interpages extends HttpServlet 
{
   
    Conexao conexao = new Conexao(); 
   
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        
    }
}

Então agora preciso aprender a fazer o código que recebe a variável do form e fazer a consulta é essa parte que não sei fazer. Alguém pode me ensinar? preciso aprender

alexandremanowar

Galera ainda não consegui resolver o problema acima! Vou continuar procurando mas se alguém puder me explicar como resolver eu agradeço
valeu

erickcellani

cara… vou colocar aki o meu codigo que está fazendo uma consulta…

estou usando DAO e Bean… qualquer duvida pergunta ai…

public UsuarioBean consultaUsuario(String userName, String pass) throws SQLException, IOException {
		
		UsuarioBean	usuario	= null;
		try {
			con	 = Conexao.connect();
			stmt = con.prepareCall("{call PRC_DADOS_USER(?, ?)}");//pegando da StoredProcedure
			stmt.setString(1, userName);
			stmt.setString(2, pass);
			rs = stmt.executeQuery();

			if (rs.next()) {
				usuario = new UsuarioBean();
				usuario.setIdUser(rs.getInt("idUser"));
				usuario.setUserName(rs.getString("userName"));
				usuario.setPass(rs.getString("pass"));
				usuario.setNome(rs.getString("nome"));
				usuario.setEmail(rs.getString("email"));
				usuario.setDataCadastro(rs.getDate("dataCadastro"));
			}
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		} finally {
			Conexao.closeConnection(con, stmt, rs);
		}
		return usuario;
	}
alexandremanowar

Ea e cara valeu pela força consegui fazer.
Porém agora estou com problemas para capturar o valor de dentro do banco. Olha como ficou minha classe:

/*
 * Interpages.java
 *
 * Created on 30 de Abril de 2007, 18:48
 */

package validacao;

import java.io.*;
import java.net.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

import conexao.Conexao;

/**
 *
 * @author alexandre
 * @version
 */
public class Interpages extends HttpServlet 
{
    
  
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException 
    {
        String usuario_logado = null;
        String senha_logado = null;
        
        String senha = request.getParameter("senha");
        String usuario = request.getParameter("usuario");
        
        Connection conn = Conexao.connect(); 
        
        Statement sql = conn.createStatement();
        
        String consulta = "select * from senhadeals where senha='"+senha+"' and usuario='"+usuario+"' limit 1";
        ResultSet rs = sql.executeQuery(consulta);
        
        
        
        while(rs.next())
        {
         
            usuario_logado = rs.getString(1);
            senha_logado = rs.getString(0);
           
        }
        
        request.setAttribute("usuario", usuario_logado);
        RequestDispatcher view = request.getRequestDispatcher("home.jsp");
        view.forward(request, response);
        
    }
    
    
}
Então não consigo enviar o valor dos campos da tabela para o jsp de resultado. Não sei se o erro esta no query de consulta ou no while.

Se eu comento essa parte do código:

[b]

String consulta = select * from senhadeals where senha=’”+senha+"’ and usuario=’"+usuario+"’ limit 1";

ResultSet rs = sql.executeQuery(consulta);
while(rs.next())
    {
     
        usuario_logado = rs.getString(1);
        senha_logado = rs.getString(0);
       
    }

[/b]
e mudo essa :request.setAttribute(“usuario”, usuario_logado); para isso: request.setAttribute(“usuario”, usuario);
Ou seja retiro o valor que deveria vir do banco e coloco apenas o que foi capturado do form ele passa na boa. Logo meu problemas ou esta na consulta ou dentro do while mas não consegui identificar fiz várias alterações mas não funcionou. Onde pode estar o erro?

erickcellani

eu naum entendi pq vc fez isso:

while(rs.next()) {
  usuario_logado = rs.getString(1);
  senha_logado = rs.getString(0);
}

no codigo que eu postei acima… naum sei se vc entendeu oq está fazendo…

mas vou explicar mesmo assim…

o metodo retorna um Bean… que eu criei…

dentro desse bean eu tenho os atributos que vão receber os dados da consulta…
qnd é feito:

usuario.setIdUser(rs.getInt("idUser"));

é pq o objeto vai receber um dado do tipo int da coluna “idUser” que está no banco… entende???

se vc fizer apenas
rs.getString(1);
ele vai receber “1” e não o dado que vem do banco…

agora… se vc precisa de varios valores… eu recomendo vc fazer o metodo retornar um ArrayList e ai vc poderia fazer algo +/- assim:

public ArrayList selectAll() throws SQLException, IOException {
		
	ArrayList		array	= new ArrayList();
	LivroVisitasBean	livro	= null;
		
	try{
		con = Conexao.connect();
		stmt = con.prepareCall("{call PRC_LIVROVISITAS_SELECTALL()}");
		rs = stmt.executeQuery();

		while (rs.next()) {
			livro = new LivroVisitasBean();

			livro.setIdMensagem(rs.getInt("idMensagem"));
			livro.setUserName(rs.getString("userName"));
			livro.setDataMensagem(rs.getDate("dataMensagem"));
			livro.setAssunto(rs.getString("assunto"));
			livro.setMensagem(rs.getString("mensagem"));

			array.add(livro);
		}
	} catch (SQLException e) {
		System.out.println(e.getMessage());
	} finally {
		Conexao.closeConnection(con, stmt, rs);
	}
	return array;
}

Bean

import java.util.Date;

public class LivroVisitasBean {
	
	private	int		idMensagem;
	private	String	userName;
	private	Date	dataMensagem;
	private	String	assunto;
	private	String	mensagem;
	
	
	public int getIdMensagem() {
	
		return idMensagem;
	}

	
	public void setIdMensagem(int idMensagem) {
	
		this.idMensagem = idMensagem;
	}

	public Date getDataMensagem() {
	
		return dataMensagem;
	}
	
	public void setDataMensagem(Date dataMensagem) {
	
		this.dataMensagem = dataMensagem;
	}
	
	public String getUserName() {
	
		return userName;
	}
	
	public void setUserName(String userName) {
	
		this.userName = userName;
	}


	
	public String getAssunto() {
	
		return assunto;
	}


	
	public void setAssunto(String assunto) {
	
		this.assunto = assunto;
	}


	
	public String getMensagem() {
	
		return mensagem;
	}


	
	public void setMensagem(String mensagem) {
	
		this.mensagem = mensagem;
	}
}

qualquer duvida só falar!

neohacker
rs.getString(1)

Isso quer dizer que ele vai retornar a String da 1ª Coluna do seu ResultSet

erickcellani

vc usa desta forma???
tem vantagem???

neohacker

erickcellani:
vc usa desta forma???
tem vantagem???

Bem eu não sou programador muito experiente, mas ja é desvantagem utilizar o SQL no seu código, mas estava apenas seguindo o exemplo dele, e fazendo uma correção pois rs.getString(1) não retorna 1 e sim o registro da 1º coluna.

Não vejo nenhuma vantagem clara deste modo, pode ser que exista, mas ainda optaria por passar o nome da coluna como parametro, mas ainda fica a dica para o amigo não utilizar código SQL dentro das suas classes.

erickcellani

sim… com certeza…

esse codigo que eu coloquei ai está dentro de uma estrutura DAO…

o Alexandre… da uma estudada em DAO… vai te ajudar…
colocar sql dentro do código é feio hein!..

eu curto fazer uma storedProcedure dentro do banco… e fazer uma classe de constante chamando a storedProcedure… ai fica bunitinho!! hehe

veja isso!
:smiley:

O_Mano

Velhinho, eu aconselho você a fazer o segunte.

Criar sua classe como Abstrata com um nome de ConnectionFactory.
Ela vai ficar + ou - assim.

/*

  • Criada em Mar 21, 2007
    */
    package com.solarium.dao.factory;
import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ResourceBundle;

/**

  • @author Marcio de Almeida Rosa
    
    */
    
    public abstract class ConnectionFactory {
    
    private Connection conexao=null;
    
    private CallableStatement call=null;
    
    private ResultSet rs=null;
    
    private Statement st=null;
    
    private PreparedStatement ps=null;
    
    private static ResourceBundle configBanco = ResourceBundle.getBundle(com.solarium.dao.factory.paramiterConnection);
    
    private static Connection connection = null;
    

    /**

    • @return
      */
      protected Connection getConnection(){
      if (connection == null){
      return novaConexaoJDBC() ;
      }else{
      return connection;
      }
      }

    /**

    • @return
      */
      private Connection novaConexaoJDBC(){
      Connection cn = null;
      try {
      Class.forName(configBanco.getString(“solarium.nomeclasse”).trim());
      String url = configBanco.getString(“solarium.url”).trim();
      String user = configBanco.getString(“solarium.user”).trim();
      String senha = configBanco.getString(“solarium.pw”).trim();
      cn = DriverManager.getConnection(url,user,senha);
      } catch (ClassNotFoundException e) {
      e.printStackTrace();
      } catch (SQLException e1) {
      e1.printStackTrace();
      } finally{}
      return cn;
      }

    /**
    *

    • @param rs

    • @param st

    • @param pst

    • @param call

    • @param cn

    • @throws Exception
      
      */
      
      protected void fecharConexao(ResultSet rs,Statement st, PreparedStatement pst, CallableStatement call, Connection cn) throws Exception {	
      
      try {
      
      if (rs != null )
      
      rs.close();
      
      } catch (Exception eRS) {
      
      throw new Exception (Problemas ao fechar o resultset: + eRS.toString());
      
      }try{
      
      if(st != null){
      
      st.close();
      
      }
      
      }catch(Exception eST){
      
      throw new Exception("Problemas ao fechar o Statemant: " + eST.toString());
      
      }try{
      
      if (pst != null){
      
      pst.close();
      
      }
      
      }catch (Exception ePST){
      
      throw new Exception("Problema ao fechar o PrepareStatemant: " + ePST.toString());
      
      }try{
      
      if (call != null){
      
      call.close();
      
      }
      
      }catch(Exception eCall){        	
      
      throw new Exception("Problema ao fechar o CalableStatemant: " + eCall.toString());
      
      }try{
      
      if(cn != null){
      
      cn.close();
      
      }
      
      }catch (Exception eCN){
      
      throw new Exception("Problema ao fechar a Conexao : " + eCN.toString());
      
      }
      
      }
      

}

acima seria sua fabrica de conexções…
seque proxima postagem o restante da explicação…

O_Mano

agora para você fazer a conexção com o banco implemente da segunte forma no seu DAO da vida…

import java.sql.SQLException;

import java.sql.Types;

import java.util.Collection;
import com.solarium.dao.factory.ConnectionFactory;

import com.solarium.dao.factory.DaoFactoryInterface;

import com.solarium.vo.FormaVO;

import com.solarium.vo.SituacaoVO;

/**

  • @author Marcio de Almeida Rosa
    
    */
    
    public class SituacaoDAO extends ConnectionFactory implements DaoFactoryInterface{
    
    private CallableStatement call = null;
    
    private Connection conexao = null;
    
    private Collection colecaoAcesso = null;
    
    private ResultSet rs = null;
    
    private SituacaoVO situacaoVO = null;
    

    /* (non-Javadoc)

    • @see com.solarium.dao.factory.DaoFactory#atualizar(java.lang.Object)
      
      */
      
      public Object atualizarDAO(Object object) {
      
      return null;
      
      }
      
      /* (non-Javadoc)
      
    • @see com.solarium.dao.factory.DaoFactory#excluir(java.lang.Object)
      
      */
      
      public Object excluirDAO(Object object) {
      
      return null;
      
      }
      
      /* (non-Javadoc)
      
    • @see com.solarium.dao.factory.DaoFactory#inserir(java.lang.Object)
      
      <em>/
      
      public Object inserirDAO(Object object) {
      
      try {
      
      situacaoVO = (SituacaoVO) object;
      
      conexao = getConnection();
      
      call = conexao.prepareCall("{CALL PRC_INSERIR_SITUACAO(?,?,?)}");
      
      call.setString(1,situacaoVO.getDescricao());
      
      call.setString(2,situacaoVO.getPermiteModificarRegistro());
      
      call.registerOutParameter(3, Types.CHAR);
      
      call.execute();
      
      situacaoVO.setMensagemAlert(call.getString(3));			
      
      } catch (SQLException e) {
      
      situacaoVO.setMensagemAlert(e.getMessage());			
      
      }finally{
      
      return situacaoVO;
      
      }		
      
      }
      
      /</em> (non-Javadoc)
      
    • @see com.solarium.dao.factory.DaoFactory#pesquisar(java.lang.Object)
      
      */
      
      public Collection pesquisarDAO(Object object) {
      
      return null;
      
      }
      
      }
      

bom , tomara que consegui te ajudar…

Falow veio

e boa sorte.

neohacker

DICA: http://www.guj.com.br/posts/list/50115.java
O Mano Leia esta tópico, irá te ajudar

alexandremanowar

E ae galera blz

Agradeço a todos pela ajuda que vcs estão me dando, aquele problema terminei resolvendo trocando isso: rs.getString(1) por isso: rs.getString(“nome do campo”). Terminou funcionando. Mas pelo que vcs estão me falando estou vendo que preciso aprender muito ainda. Estou estudando java e jsp e preciso aprender a forma mais profissional de tabalhar.
Eu gostaria de saber primeiro o que é um DAO ? Pelo o que eu entendi eu uso o DAO para colocar os sql lá dentro e uso a class só para pegar o resultado! Quando eu criar esse DAO eu coloco ele dentro de algum pacote? Por exemplo quando eu crio um novo servlet eu vou dentro do pacote e clico na opção new e em seguida servlet. É assim que se cria um DAO?
vcs poderia me explicar como criar o DAO, criar o sql dentro dele e usar essa minha class só para receber os resultado?
Eu trabalho com NetBeans 5.5 para desenvolver meu aplicaticos java web
Eu agradeço muito a ajuda de vcs!

Criado 30 de abril de 2007
Ultima resposta 4 de mai. de 2007
Respostas 15
Participantes 5