Problema ao executar aplicação. Can anyone help me? =)

3 respostas
P

Olá pessoal,

Bem, estou aprendendo Java. E o meu exercício teste inicial é criar uma espécie simples de Agenda de contatos.

Atualmente estou desenvolvendo uma parte simples de conexão com o Banco de dados, aonde tenho duas classes chamadas BancoDados.java, que contém um método chamado ConectaBD por onde a conexão é feita. Já o segundo, é uma interface simples para a configuração da conexão.

Segue o código da classe BancoDados.java

/**
* @file BancoDados.java
* @author Sergio Figueras
* @mail [email removido]
* @date 09/04/2008 
* @note Classe para manipulação de dados do Banco de dados da agenda.
* 
* 
* Tipo de licença: BSD
* Copyright (c) 1982, 1986, 1990, 1991, 1993
*      The Regents of the University of California.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
*    must display the following acknowledgement:
*      This product includes software developed by the University of
*      California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
*    may be used to endorse or promote products derived from this software
*    without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* 
*/

package agenda.comm;

//Declarações import
//A primeira declaração importa as classes e métodos SQL.

import java.sql.*;

public class BancoDados{
	
	public static void ConectaBD(String ipBancoDados, String aliasBancoDados, String userBancoDados, String passwordBancoDados, String portaBancoDados) 
	{
	/*
	 * Este método tem a função de conectar o Banco de Dados.
	 * Banco de dados: MySQL.
	 * username: sergio
	 * password: sergio
	 * 
	 * Procedimentos(Por ordem):
	 *  0 - Setar os argumentos de conexão.
	 *  1 - Realizar a conexão com o Drive.
	 *  2 - Realizar a conexão com o Banco de Dados.
	 */
	
      String CaminhoBD = "jdbc:mysql://"+ipBancoDados+":"+portaBancoDados+"/"+aliasBancoDados+"?user="+userBancoDados+"&password="+passwordBancoDados;	// Variavel armazena PATH do BD.	
	  Connection Varconnection = null;	// Variavel de conexão. (TYPE: CONNECTION)
	  	  
	  try
	  {
		  /*  
		   * Este container TRY testa o Drive de conexão.
		   */
		  Class.forName("com.mysql.jdbc.Driver").newInstance();
		  System.out.println("Drive JDBC carregado com Sucesso...");
	  }
	  catch (Exception E)
	  {
		  System.out.println("ERRO: Impossível carregar o Drive JDBC.");
		  E.printStackTrace();
		  return;
	  }	 
	
	  try
	  {
		  /*  
		   * Este container TRY testa a conexão com o Banco.
		   */
		  Varconnection = DriverManager.getConnection(CaminhoBD);
	  	  System.out.println("A conexão foi bem sucedida...");
	  }	
	  catch (Exception ExConexao)
	  {
		 System.out.println("ERRO: A conexão com o Banco de dados foi impossível, verifique\n" +
		 		"as configurações de conexão e as permissões do Banco de dados.");
		 ExConexao.printStackTrace();
		 return;
	  }
		}
}

Agora, a seguir, o código do arquivo principal.java

/**
 * @file principal.java
* @author Sergio Figueras
* @mail [email removido]
* @date 09/04/2008 
* @note Classe para execução principal do aplicativo.
* 
* 
* Tipo de licença: BSD
* Copyright (c) 1982, 1986, 1990, 1991, 1993
*      The Regents of the University of California.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
*    must display the following acknowledgement:
*      This product includes software developed by the University of
*      California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
*    may be used to endorse or promote products derived from this software
*    without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* 
*/
package agenda.comm;

//Declarações import
//A primeira declaração importa a classe Scanner, que será usado para entrada de dados.

import java.util.Scanner;

public class principal {

	public static void main(String[] args) 
	{
		principal.ConfigurarConexao();
	}
	
	public static void ConfigurarConexao()
	{
		/* 
		 * METODO: ConfigurarConexao()
		 * Este método tem por objetivo pedir para que o usuário digite parametros de configuração.
		 * 1 - O método perguntará se o usuário deseja usar a configuração padrão ou personalizada.
		 * 2.1 - Caso nao deseje, será utilizada a configuração padrão do software.
		 * 2.2 - Caso deseje, as configurações novas serão armazenadas e usadas no método ConectaBD(). Referência: BancoDados.java   
		 */
		
		Scanner input = new Scanner(System.in);	//Criando objeto do tipo Scanner para inserção de dados.
		
		/* VARIAVEIS DE CONFIGURAÇÃO
		 * Abaixo, o nome das variáveis que serão criadas e seu tipo e uso.
		 * portaBancoDados1 (INT):		Usada para armazenar a porta aonde a conexão será realizada.
		 * ipBancoDados1 (STRING):		Usada para armazenar o endereço de IP aonde está armazenado o BD.
		 * * aliasBancoDados1(STRING): 	Usada para armazenar o nome do alias do BD.
		 * userBancoDados1 (STRING):	Usada para armazenar o nome de usuário que se conectara no banco.
		 * passwordBancoDados1(STRING): Usada para armazenar a senha do usuário no BD.  
		 */
		String opcao, ipBancoDados1, aliasBancoDados1, userBancoDados1, passwordBancoDados1, portaBancoDados1;
				
		System.out.print("Deseja realizar nova configuração de conexão ou usar a padrão?[0(sim)/1(não)]: ");
		opcao = input.nextLine();
		opcao = opcao.toUpperCase();
				
		// Condicional para verificar a opção desejada.
		if (opcao == "Y")
		{
			System.out.print("Por favor, digite o IP ao qual deseja se conectar: ");
			ipBancoDados1 		= input.nextLine();
			System.out.print("\nPor favor, digite a porta de conexão do MySQL: ");
			portaBancoDados1 	= input.nextLine();
			System.out.print("\nPor favor, digite o Alias do banco a ser conectado: ");
			aliasBancoDados1 	= input.nextLine();
			System.out.print("\nPor favor, digite o nome de usuário: ");
			userBancoDados1 	= input.nextLine();
			System.out.print("\nPor favor, digite a senha de usuário: ");
			passwordBancoDados1 = input.nextLine();	
		}
		
		if (opcao == "N")
		{
		/* 
		 * As variáveis abaixo estão sendo inicializadas com o valor padrão, caso o
		 * usuário tenha escolhido manter a configuração padrão.
		 */
			ipBancoDados1 	    = "127.0.0.1";
			aliasBancoDados1    = "AgendaTeste";
			userBancoDados1     = "sergio";
			passwordBancoDados1 = "sergio";
			portaBancoDados1    = "3306"; 
			
			BancoDados.ConectaBD(ipBancoDados1, aliasBancoDados1, userBancoDados1, passwordBancoDados1, portaBancoDados1);			
		}
	}

}


O Problema:
Eu não sei porquê (e aliás, como gostaria de saber, quando executo essa classe ele não executa o método ConectaBD corretamente. Na verdade, ele nem chega a executar caso a opção “Y” seja digitada.

Sei que deve ter algumas coisas erradas, por favor, quem tiver disponibilidade para comentar sobre a clareza do código, dar algumas dicas, todas essas são bem vindas.

Obrigado!

3 Respostas

M

tente fazer as comparações com o método equals, pois == compara as referências, e o equals compara os valores.

if (opcao.equals("N")) {

netShot

Sobre comparações de strings da uma lida nesse artigo :

http://www.java-tips.org/blog/java-se/using-or-equals-for-string-comparision.html

gilmarcand

Sérgio,
fora as comparações de String que você precisa refazer, outra coisa que você precisa alterar é:

No seu algoritmo o método ConectaDB só está sendo executado no bloco para a opção “N”. Sugiro o seguinte:

if(opcao.equals("Y")) { // leia todas as variaveis com o Scanner } else { // carrega os valores default } // aqui fora você chama o método BancoDados.ConectaBD(ipBancoDados1, aliasBancoDados1, userBancoDados1, passwordBancoDados1, portaBancoDados1);

Tenta aí. Abraço e bons códigos!

Criado 11 de maio de 2008
Ultima resposta 12 de mai. de 2008
Respostas 3
Participantes 4