Alguém pode me ajudar a resolver alguns erros na conexão com o banco de dados?

Estou iniciando em java. Atualmente estou tentando abrir uma conexão com o banco de dados e fazer uma simples consulta como o nome e senha do usuário para saber se usuário existe ou não. Se alguém souber o pq dos erros abaixo. Desde já agradeço!

Exception in thread “main” java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cadastro_usua.conexao.abrirconexao(conexao.java:29)
at cadastro_usua.verificar_login.validar_login(verificar_login.java:14)
at cadastro_usua.interface_login.main(interface_login.java:25)

<<<<>>>>>

package cadastro_usua;

import java.util.Scanner;

public class interface_login {

private static Scanner leremail;
private static Scanner lersenha;

public static void main(String[] args)  {
	 String pass, nome;
	
	
	// TODO Auto-generated method stub
	System.out.println("Email :");
	leremail = new Scanner(System.in);
	nome = leremail.nextLine();
	
	System.out.println("Senha :");		
	lersenha = new Scanner(System.in);
	pass=lersenha.nextLine();
	

	verificar_login.validar_login(nome, pass);	
}

}

<<<<Minha class verificar_login para fazer a verificação nome e senha>>>>>
Aqui o eclipse me obrigou a colocar todos estes try e catch , quando retiro dar bastante erro.

public class verificar_login {

public static void validar_login(String nome, String senha ){
	 String name1 = nome;
	 String pass = senha;
	
		Connection conec = conexao.abrirconexao();
		Statement stmt = null;
		try {
			stmt = conec.createStatement();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ResultSet rs = null;
		try {
			rs = stmt.executeQuery("SELECT * FROM tbl_cliente");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
			try {
				while(rs.next()) {
					String name = rs.getString(nome);
					String senh = rs.getString(senha);
				    if((name1 ==name ) && (pass == senh)){
				        System.out.println("Usuário existente :) !"); 
				
				    }else {
				         System.out.println("Desculpe Email ou Senha Incorreto :( ! ");
				   }
  }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
				
}

}

<<<<<< Minha class para fazer conexão>>>>>>>>
package cadastro_usua;

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

public class conexao {
private static Connection conexaoA;
private static String nameuser;
private static String senha;
private static String url;
private static String nomebanco;
private static String ender;
private static String driver;

public conexao() {
	nameuser="root";
	senha="";
	driver="com.mysql.jdbc.Driver";
	ender="127.0.0.1";
	nomebanco="login";
	url="jdbc:mysql://"+ender+"/"+nomebanco;		
}

public static Connection abrirconexao() {
	try {
	Class.forName(driver);
    conexaoA = DriverManager.getConnection(url, nameuser, senha);
   
}	 
	catch(ClassNotFoundException e) {
	e.printStackTrace();
	
}
	catch(SQLException e) {
	e.printStackTrace( );
	}
	return conexaoA;
	}

public static void fecharconexao() {
try {
conexaoA.isClosed();
}
catch(SQLException e){
e.printStackTrace();
}

}
}

Na sua classe de verificar Login troque os Objetos de Statement para PreparedStatement porque eles são mais usados atualmente e são mais seguros, depois disso faça:

PreparedStatement ps = conec.prepareStatement("SELECT * FROM tabela");
ResultSet rs = ps.executeQuery();

Uma dica na sua classe de teste onde existe o main você na precisa criar dois objetos da classe Scanner, você pode ler todas as informações com o mesmo, e coloque o instanciamento do Scanner dentro do main, porque é um má prática criar essas variáveis globais em classes que contém o método main.

Obrigado @Matheus_Emanuel pela dica sobre o Scanner, eu realmente não sabia.
E sobre o PreparedStatement , eu já havia tentando com ele antes sabendo que é o mais indicado atualmente.
Porem eu não entendo o pq dos erros eu já revisei o código milhões d vezes e acredito que não há nada d errado.
Novamente Obrigada!

Prezada, Você já verificou se o driver JDBC do MySQL está no seu classpath.

driver="com.mysql.jdbc.Driver";

Sim esta instalado.
Entrei no java build path, add external jars…
Mas acredito q deve ter algo d errado ai. Apesar de ter instalado.
tanto que ele retorna dizendo que o driver é desconhecido
at java.lang.Class.forName(Unknown Source) :confused:
Revisei o código milhões de vezes e acredito q não seja pq alguma variável tenha deixado de ser inicializada.

Eu notei algo há algum tempo qndo eu faço o download d um pdf. Antigamente eu abria o arquivo e era redirecionado ao site que baixei, entao qndo eu quisesse compartilhar era so copiar o link.
Atualmente qndo eu faço um download o arquivo fica salvo no meu pc com o caminho do meu diretorio,e entao tenho q saber o nome do livro que baixei pesquisar na internet novamente
e quando eu estivesse no site que fiz o download conseguiria apenas la copia o link do livro. O mesmo estar acontecendo com o Driver jdbc que baixei. Eu não tenho certeza mas tou começando a presumir que seja isso. Poderia ser este o problema?

Talvez seja isso, verifica o tamanho do arquivo, ele e em torno 3,6MB

Roda esse teste ai embaixo no seu “main”, antes de qualquer outro codigo, sem alterar nada apenas para vê se o driver é carregado.

import java.sql.Connection;

import java.sql.DriverManager;

/**
*

  • @author
    */
    public class ConnDB {

    private static final String USUARIO = “root”;
    private static final String SENHA = “”;
    private static final String URL = “jdbc:mysql://127.0.0.1:3306/meubanco”;
    private static final String DRIVER = “com.mysql.jdbc.Driver”;

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      // TODO code application logic here
      try{
      // Registrar o driver
      Class.forName(DRIVER);

      // Capturar a conexão
      Connection conn = DriverManager.getConnection(URL, USUARIO, SENHA);

      }catch(Exception ex){
      ex.printStackTrace();

      }
      }

}

se não for encontrado o Driver deve gerar o seguinte erro:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at conndb.ConnDB.main(ConnDB.java:29)

agora dar este erro. Você conhece a razão??
:smiley:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:341)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2222)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017)
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:779)
at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ConnectDB.ConnDB.main(ConnDB.java:27)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:300)
… 15 more

Se você tiver o Xampp instalado você tem que inicializar o MySql pelo Painel de controle do mesmo.

Obrigada @Matheus_Emanuel eu notei q havia esqcido d liga-lo o.o rs. Este esta rodando.

1 curtida

Por nada!