Conexão com banco de dados

14 respostas
M

pessoal tudo bem.

sou programador Delphi e a mais ou menos 2 meses estou estudando Java. Mas tenho uma dúvida que me fez empacar nos meus estudos. Seu eu tiver uma classe para conexão (conectadb.java) com banco de dados e tiver duas outras ( cadastroclientes.java e cadastrofornecedor.java com interface grafica swing) para manipulação de dados como faço para acessar resultsets da classe conectadb e manipular os dados atraves dela.

Se eu conectar o banco na mesma classe que uso funciona numa boa. espero ter sido claro.

Se alguém tiver um exemplo simples para me passar eu agradeço.

obs: já sei conectar banco e recuperar inserir e alterar dados.

valeu!!!

14 Respostas

W

Cara seja bem vindo ao Java, tem uma apostila(FJ21) q vai te ajudar muito no site da Caelum: faça o download http://www.caelum.com.br/caelum/curso-21.jsp

blz?
Espero ter te ajudado
Abraços

M

Valeu Washington!

A apostila parece ser boa.
Estou dando uma olhada e estou gostando.

obrigado!

W

Uma opção eh ter uma classe que fabrica conexões, não sei se eh o caso da conectadb.java.

Por exemplo:

public class Conectadb { public static Connection getConnection() throws SQLException { try { Class.forName("com.mysql.jdbc.Driver"); //Altere o Driver caso não seja o MySQL return DriverManager.getConnection("jdbc:mysql://localhost/seuBanco","root",""); } catch (ClassNotFoundException e) { throw new SQLException(e.getMessage()); } } }

Quando precisar fazer conexão apartir das outras classes (cadastroclientes.java e cadastrofornecedor.java)
eh só fazer:

Connection con = Conectadb.getConnection();

Só uma dica, tente utilizar os padrões da Sun: Toda Classe começa com letra maiúscula :wink:
T+

W

Crie uma classe Fábrica de conexões:

package br.com.teste.jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class ConnectionFactory {

public static Connection getConnection() throws SQLException{
	try{
		Class.forName("com.mysql.jdbc.Driver");
		System.out.println("Conectando ao banco");
		return DriverManager.getConnection("jdbc:mysql://localhost:3306/teste",
                "root", "");
	}catch (ClassNotFoundException e) {
		System.out.println("Não conectado");
		throw new SQLException(e.getMessage());
	}
}

}

e depois teste esta conexão com a classe TestaConexao:

package br.com.teste.jdbc.teste;

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

import br.com.teste.jdbc.ConnectionFactory;

public class TestaConexao {

/**
 * @param args
 * @throws SQLException
 */
public static void main(String[] args) throws SQLException {
	Connection con = ConnectionFactory.getConnection();
	con.close();
}

}

Devemos criar uma classe modelo responsável pelos métodos acessores:

package br.com.teste.jdbc.modelo;

public class Contato {

private Long id;
private String nome;	
private String endereco;

public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public Long getId() {
	return id;
}
public void setId(Long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}

}

Procure sempre utilizar o DAO para inserir, listar, remover os dados do banco:

package br.com.teste.jdbc.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import br.com.teste.jdbc.ConnectionFactory;
import br.com.teste.jdbc.modelo.Contato;

public class ContatoDAO {

private Connection conection;

public ContatoDAO() throws SQLException {
	this.conection = ConnectionFactory.getConnection();
}

public void adiciona(Contato contato) throws SQLException {

	PreparedStatement stmt = this.conection.prepareStatement("INSERT INTO CONTATOS "
			+ "(NOME, EMAIL, ENDERECO)VALUES (?,?,?)");

	stmt.setString(1, contato.getNome());
	stmt.setString(2, contato.getEndereco());

	stmt.execute();
	stmt.close();
}

}

pra vc inserir dados no banco aí está um exemplo:

package br.com.teste.jdbc.teste;

import java.sql.SQLException;

import br.com.teste.jdbc.dao.ContatoDAO;
import br.com.teste.jdbc.modelo.Contato;

public class TestaInsere {

/**
 * @param args
 */
public static void main(String[] args) throws SQLException{

	Contato contato = new Contato();

	contato.setNome("Washington");		
	contato.setEndereco("Av. Teste");

	ContatoDAO dao = new ContatoDAO();

	dao.adiciona(contato);
	System.out.println("Gravado!");

}

Abraços!!!
[]´s
wsh

M

Ai washington valeu o empenho.

Peguei o exemplo que voce me mandou. Funcionou direitinho.

Valeu o empenho.

P

boas, espero que me possam ajudar.

estou tentando fazer a coneção e aparece-me sempre um erro, ja fiz varios testes e não consigo resolver.

Exception in thread "main" java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3536)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3468)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:917)
	at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3974)
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1282)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2142)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:773)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
	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:406)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:16)
	at teste.testeconexao.main(testeconexao.java:12)

podem me ajudar?

G

Opa!! coloca o código da sua conexão…

P

aqui chama a conexão:

package teste;

import java.sql.Connection;
import java.sql.SQLException;
import jdbc.ConnectionFactory;



public class testeconexao { 

	/** 
	* @param args 
	* @throws SQLException 
	*/ 
	public static void main(String[] args) throws SQLException { 
	Connection con = ConnectionFactory.getConnection(); 
	con.close(); 
	} 

	}

depois para fazer a conexao tenho:

[code]

package teste;

import java.sql.Connection;
import java.sql.SQLException;
import jdbc.ConnectionFactory;

public class testeconexao {

/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
Connection con = ConnectionFactory.getConnection();
con.close();
}

}

[/quote]

P

enganei-me

depois para fazer a conexao tenho:

package jdbc;

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


public class ConnectionFactory { 

	public static Connection getConnection() throws SQLException{ 
	try{ 
		Class.forName("com.mysql.jdbc.Driver"); 
		System.out.println("Conectando ao banco"); 
		return DriverManager.getConnection("jdbc:mysql://localhost:3306/teste", "root", ""); 
	}catch (ClassNotFoundException e) { 
		System.out.println("Não conectado"); 
	throw new SQLException(e.getMessage()); 
	} 
	} 
}
G

Tem certeza que o banco tem senha em branco?

P

sim tenho, agora apenas as duas classes no mesmo package, porque estavam em pakages diferentes, e agora dá um erro: “could not find the main class: jdbc.testeconexao. program will exit.”

G

Opa!! pode ser o nome do pacote errado, verifica

P

eu verifiquei o nome e até mudei o nome do pacote e aparece o mesmo erro…

mais alguma sugestão?

C

Washington Wiltenburg:
Crie uma classe Fábrica de conexões:

package br.com.teste.jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class ConnectionFactory {

public static Connection getConnection() throws SQLException{
	try{
		Class.forName("com.mysql.jdbc.Driver");
		System.out.println("Conectando ao banco");
		return DriverManager.getConnection("jdbc:mysql://localhost:3306/teste",
                "root", "");
	}catch (ClassNotFoundException e) {
		System.out.println("Não conectado");

		throw new SQLException(e.getMessage());
	}
}

}

e depois teste esta conexão com a classe TestaConexao:

package br.com.teste.jdbc.teste;

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

import br.com.teste.jdbc.ConnectionFactory;

public class TestaConexao {

/**
 * @param args
 * @throws SQLException
 */
public static void main(String[] args) throws SQLException {
	Connection con = ConnectionFactory.getConnection();
	con.close();
}

}

Devemos criar uma classe modelo responsável pelos métodos acessores:

package br.com.teste.jdbc.modelo;

public class Contato {

private Long id;
private String nome;	
private String endereco;

public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public Long getId() {
	return id;
}
public void setId(Long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}

}

Procure sempre utilizar o DAO para inserir, listar, remover os dados do banco:

package br.com.teste.jdbc.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import br.com.teste.jdbc.ConnectionFactory;
import br.com.teste.jdbc.modelo.Contato;

public class ContatoDAO {

private Connection conection;

public ContatoDAO() throws SQLException {
	this.conection = ConnectionFactory.getConnection();
}

public void adiciona(Contato contato) throws SQLException {

	PreparedStatement stmt = this.conection.prepareStatement("INSERT INTO CONTATOS "
			+ "(NOME, EMAIL, ENDERECO)VALUES (?,?,?)");

	stmt.setString(1, contato.getNome());
	stmt.setString(2, contato.getEndereco());

	stmt.execute();
	stmt.close();
}

}

pra vc inserir dados no banco aí está um exemplo:

package br.com.teste.jdbc.teste;

import java.sql.SQLException;

import br.com.teste.jdbc.dao.ContatoDAO;
import br.com.teste.jdbc.modelo.Contato;

public class TestaInsere {

/**
 * @param args
 */
public static void main(String[] args) throws SQLException{

	Contato contato = new Contato();

	contato.setNome("Washington");		
	contato.setEndereco("Av. Teste");

	ContatoDAO dao = new ContatoDAO();

	dao.adiciona(contato);
	System.out.println("Gravado!");

}

Abraços!!!
[]´s
wsh

Ei alguem poderia mim explicar poque está dando este erro:

run:

Conectando ao banco

Exception in thread main java.sql.SQLException: No value specified for parameter 3

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)

at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2566)

at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2542)

at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2468)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1298)

at sistemdirectort.ContatoDAO.adiciona(ContatoDAO.java:28)

at sistemdirectort.TestaInsere.main(TestaInsere.java:24)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

e não está inserindo os dados no meu banco de dados.

valeu obrigado!
Criado 28 de dezembro de 2007
Ultima resposta 19 de jul. de 2011
Respostas 14
Participantes 6