Null Pointer Exception

Java

01/03/2014

Fala galera.

Não sei mais o que fazer no código.

Estou tentando enviar para um banco de dados as informações passadas pelo usuário.

Essa informações seriam:
Filia; Nome Completoç; Endereco e Cidade.

Depois tentaria traze-las de volta do banco.

Quando executo a JVM indica a exceção:

Exception in thread "main" java.lang.NullPointerException
at br.com.IgrejaViva.CadastraMembro.insert(CadastraMembro.java:60)
at br.com.IgrejaViva.CadastraMembro.main(CadastraMembro.java:14)



O código é esse:

package br.com.IgrejaViva;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Scanner;

public class CadastraMembro{


	public static void main(String[] args) throws SQLException {
		
		insert();
		
		select();
		
	}
	
	public static void insert() throws SQLException{

		@SuppressWarnings("resource")
		Scanner scanner = new Scanner(System.in);
		Membro membro = new Membro();
		ConnectionDB con = new ConnectionDB();

		System.out.println("Bem vindo ao sistema de cadastros");
		System.out.println("Digite 1 para sair !");

		int op = 0;
		while (op != 1) {

			System.out.println("Digite a Filial do Membro");
			membro.setFilial(scanner.nextLine());

			System.out.println("Digite o Nome completo");
			membro.setNome(scanner.nextLine());

			System.out.println("Digite o Endereço");
			membro.setEndereco(scanner.nextLine());

			System.out.println("Digite o Cidade");
			membro.setCidade(scanner.nextLine());

			if (op >= 2) {
				
				System.out.println("Digite apenas o numero 1 para sair");
			}
			else op = scanner.nextInt();
		}

		PreparedStatement query = con.prepareStatement("INSERT INTO Membro (filial, nomecompleto, endereco, cidade) VALUES (?, ?, ?, ?)");
		query.setString(1, membro.getFilial()); // onde a JVM interrompe a execução
		query.setString(2, membro.getNome());
		query.setString(3, membro.getEndereco());
		query.setString(4, membro.getCidade());
		query.executeQuery();

	}

	public static ArrayList<Membro> select() throws SQLException{

		ConnectionDB con = new ConnectionDB();
		ArrayList<Membro> listaDeMembros = new ArrayList<Membro>();
		Membro membro = new Membro();
		
		PreparedStatement query2 = con.prepareStatement("SELECT * from Membro");
		ResultSet resultados = query2.executeQuery();
		
		while (resultados.next()) {
			listaDeMembros.add(membro);
			membro.setFilial(resultados.getString("filial"));
			membro.setNome(resultados.getString("nomecompleto"));
			membro.setEndereco(resultados.getString("endereco"));
			membro.setCidade(resultados.getString("cidade"));

		}
		return listaDeMembros;
	}
}


Se alguém já passou por esse problema ou sabe como posso resolve-lo me ajude!
Andre Teixeira

Andre Teixeira

Curtidas 0

Respostas

André Camargo

André Camargo

01/03/2014

Não entendi muito o que tu quer fazer, mas pergunto o seguinte? Quais são os campos do teu banco?. e Tem um erro de lógica no teu código ele pode ler 20 "pessoas" e vai salvar sempre só a ultima, se for essa ideia esquece o erro.
GOSTEI 0
Andre Teixeira

Andre Teixeira

01/03/2014

Não entendi muito o que tu quer fazer, mas pergunto o seguinte? Quais são os campos do teu banco?. e Tem um erro de lógica no teu código ele pode ler 20 "pessoas" e vai salvar sempre só a ultima, se for essa ideia esquece o erro.


Eu estou usando o MS SQL Server Express.
Os campos no banco de dados são exatamente os que estão na linha 52, dentro do INSERT.

Eu entendo que há esse erro de lógica.

A minha intensão é fazer o insert no banco, testando essa conexão.
GOSTEI 0
André Camargo

André Camargo

01/03/2014

ok, tu está selecionando a base corretamente? no teu arquivo que inicia a conexão.
GOSTEI 0
Andre Teixeira

Andre Teixeira

01/03/2014

ok, tu está selecionando a base corretamente? no teu arquivo que inicia a conexão.


Dá uma olhada no código de conexão.

package br.com.IgrejaViva;

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

public class ConnectionDB {

	private static String URL ="jdbc:microsoft:sqlserver://localhost;databaseName=Congresso;";
	private static String usuario = "ANDRETEIXEIRA";
	private static String password = "q1w2e3";  
	private static String DRIVER ="com.microsoft.sqlserver.jdbc.SQLServerDriver";


	public static Connection abreConexao() throws SQLException{  
		try {  

			Class.forName(DRIVER);
			Connection con = DriverManager.getConnection(URL, usuario, password);  
			return con;  

		} catch (ClassNotFoundException e) {  
			throw new SQLException(e.getMessage());  

		}
	}


	public PreparedStatement prepareStatement(String string) {
		// TODO Auto-generated method stub
		return null;
	}
}


Eu descobri que não estava executando o abreConexao() na main.

Mas mesmo depois de fazer o java continua me retornando a exceção do driver do sqlserver.

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;databaseName=Congresso;
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at br.com.IgrejaViva.ConnectionDB.abreConexao(ConnectionDB.java:20)
at br.com.IgrejaViva.CadastraMembro.insert(CadastraMembro.java:26)
at br.com.IgrejaViva.CadastraMembro.main(CadastraMembro.java:14)



Já verifiquei várias vezes a build path e o jar do driver sqlserver.

Mesmo assim o java joga a exceção.

GOSTEI 0
André Camargo

André Camargo

01/03/2014

ok, tu está selecionando a base corretamente? no teu arquivo que inicia a conexão.


Dá uma olhada no código de conexão.

package br.com.IgrejaViva;

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

public class ConnectionDB {

	private static String URL ="jdbc:microsoft:sqlserver://localhost;databaseName=Congresso;";
	private static String usuario = "ANDRETEIXEIRA";
	private static String password = "q1w2e3";  
	private static String DRIVER ="com.microsoft.sqlserver.jdbc.SQLServerDriver";


	public static Connection abreConexao() throws SQLException{  
		try {  

			Class.forName(DRIVER);
			Connection con = DriverManager.getConnection(URL, usuario, password);  
			return con;  

		} catch (ClassNotFoundException e) {  
			throw new SQLException(e.getMessage());  

		}
	}


	public PreparedStatement prepareStatement(String string) {
		// TODO Auto-generated method stub
		return null;
	}
}


Eu descobri que não estava executando o abreConexao() na main.

Mas mesmo depois de fazer o java continua me retornando a exceção do driver do sqlserver.

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;databaseName=Congresso;
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at br.com.IgrejaViva.ConnectionDB.abreConexao(ConnectionDB.java:20)
at br.com.IgrejaViva.CadastraMembro.insert(CadastraMembro.java:26)
at br.com.IgrejaViva.CadastraMembro.main(CadastraMembro.java:14)



Já verifiquei várias vezes a build path e o jar do driver sqlserver.

Mesmo assim o java joga a exceção.



Assim, tu já adicionou a biblioteca do banco?
GOSTEI 0
Andre Teixeira

Andre Teixeira

01/03/2014

Então, como eu posso fazer essa importação?

Onde encontro a biblioteca?
GOSTEI 0
André Camargo

André Camargo

01/03/2014

Qual ide tu esta utilizando, deve clicar no projeto e mandar adicionar biblioteca. e escolher o jdbc correto.
GOSTEI 0
Andre Teixeira

Andre Teixeira

01/03/2014

Eu to usando eclipse.
Se for ao .jar do sqlserver driver que está se referindo, eu já fiz o procedimento de importação desse driver.

Inclusive apagando o jar e refazendo o build path.
GOSTEI 0
André Camargo

André Camargo

01/03/2014

Verifica em qual porta esta rodando o teu banco?
GOSTEI 0
André Camargo

André Camargo

01/03/2014

private static String URL ="jdbc:sqlserver://localhost:1433;databaseName=teste;";


Testa com a porta. ve se o banco está rodando.
GOSTEI 0
Andre Teixeira

Andre Teixeira

01/03/2014

private static String URL ="jdbc:sqlserver://localhost:1433;databaseName=teste;";


Testa com a porta. ve se o banco está rodando.



Boa noite amigo.

Eu verifiquei na minha URL que tinha um 'microsoft' sobrando.

Mas agora o erro que ocorre é esse:

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1309)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at br.com.IgrejaViva.ConnectionDB.abreConexao(ConnectionDB.java:20)
at br.com.IgrejaViva.CadastraMembro.insert(CadastraMembro.java:61)
at br.com.IgrejaViva.CadastraMembro.main(CadastraMembro.java:14)


Já configurei firewall, sql managment studio mas nada funcionou.
GOSTEI 0
André Camargo

André Camargo

01/03/2014

Pela mensagem está dizendo que está bloqueado no seu firewall o acesso. Assim, o banco está na própria maquina., se tiver como postar a foto do seu firewall que está liberado e do seu gerenciador do banco pra mim dar uma olhada.
GOSTEI 0
POSTAR