Java e Banco MySql Ajuda

Ola gostaria de ajuda sobre java e bd mysql, pois eu consego conectar porem nao estou conseguindo incluir, excluir, e consultar dados, algume tem algum codigo ou projeto que eu possa estudar para ver o funcionamento disso, as apostilas da caelum são boas, porem ainda tenho duvidas, se alguem tiver algum material mais completo ficaria agradecido.

Posta o código que está utilizando para estabelecer a conexão e rodar os comandos SQL´s.
Fica mais facil ajudar em cima do seu código.

[]´s

Daniel

Boa tarde

Vou postar um código aqui ai vc tentar utilizar, mas esta tudo em um unico arquivo é apenas para você ver como funciona, caso você queria adaptar em seu sistema da uma olhada no design pattern DAO e ServiceLocator.

Segue o código:

package br.com.exemplo.conexao;

import java.sql.*;
import java.util.List;
import java.util.ArrayList;

public class Exemplo{
    
	private String URL  = "";
	private String USER = "";
	private String PASS = "";
	
    private Connection getConexao(){
        Connection con = null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
            con =  DriverManager.getConnection(URL, USER, PASS);
            
        } catch(Exception ex){
			ex.printStackTrace();
			
		}
        
		return con;
    }
    
    public List geraConsulta() {
 
		List lista = new ArrayList();
			
        try{
            Connection con = getConexao();
			
			String sql = "SELECT nome FROM tabela";
			
            PreparedStatetment stmt = con.prepareStatement(sql);
			
            ResultSet rs  = stmt.executeQuery();            
            
			while(rs.next())
			{
				lista.add(rs.getString("nome"));
			}	
           
            rs.close();
			
            stmt.close();
			
            con.close();
			
        } catch(Exception ex){
			ex.printStackTrace();
			
		}
        
		return lista;
        
    }
    
    
}

falou.

Classe de Conexão…

import java.sql.*;

public class Conectar {
String url = “jdbc:mysql://localhost:3306/bdbar”;
String user = “rhoribe”;
String pass = “1908”;
Connection getConnection(){
Connection conn =null;
try{
Class.forName(“com.mysql.jdbc.Driver”);
conn = DriverManager.getConnection(url,user,pass);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
}

Classe de Inclusao

public class Incluir {
Conectar c;
Incluir(){
Conectar conecta = new Conectar();
Connection con = conecta.getConnection();
try{
java.sql.Statement st = con.createStatement();
st.executeUpdate(“INSERT INTO clientes (nomeCli) values (‘rhoribe’)”);
}catch(Exception e){
e.printStackTrace();
}
}
}

Gostaria de Saber se as duas classes estao corretas… e quais… os erros que estou fazendo… ?

Boa tarde

Então da forma que você fez funciona sim, mas tem algumas coisas que você poderia melhorar:

1º) Torne suas variaveis de conexão como constantes para evitar de que a nova cada instancia criar essas strings novamente:

exemplo: private static final url = “valor”

2º) Deixe o seu método getConnection como static para evitar de criar uma nova instancia da classe de conexão a cada nova requisição:

exemplo: public static Connection getConnection()

Na sua classe Incluir, vc irá tirar a criação da Conexão e irá invocar o método estatico, uma outra coisa é de sempre que realizar um conexão ou abrir um statement vc deve fechar, exemplo:

con.close();
st.close();

Da uma olhada tmb na criação de variaveis desnecessarias, utilizar import ao invés de nome completo e outras coisas.

Espero ter ajudado.

Outro detalhe, incluir é um verbo, sugere uma ação. Se sugere uma ação, é provável que seja um método.

Quando postar códigos, utilize a tag code.

Normalmente, incluir seria um metodo de alguma classe. :wink:

public class Foo{
  public void incluir(){

  }
}

Olá, tudo bom?

o executeUpdate retorna um int, confirmando se conseguiu incluir ou não.
crie um variável int:

int resp=0;
resp=st.executeUpdate("INSERT INTO clientes (nomeCli) values ('rhoribe')"); 

Abraço.

Ola desculpe , a todos integrantes deste grupo, venho novamente pedir uma ajuda, como havia escrito anteriormente gostaria, que me ajudassem a mexer com banco de dados em java, segui as sugestões dos amigos, e modifiquei parte do meu codigo que estou testando, agora gostaria que me explicassem como ponho os comandos SQLs nos metodos Statement , poderiam me dar um exemplo pratico se nao for muito dificil?

Codigo de conexão.

[code]import java.sql.*;

public class Conectar {
public static Connection getConnection(){
String url = “jdbc:mysql://localhost:3306/bdbar”;
String user = “rhoribe”;
String pass = “1908”;
Connection conn =null;
try{
Class.forName(“com.mysql.jdbc.Driver”);
conn = DriverManager.getConnection(url,user,pass);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
}
[/code]

Codigo da Classe que manipula os dados

public class Dados { void Incluir(){ Connection con = Conectar.getConnection(); String nome = "José"; int resp = 0; try{ java.sql.Statement st = con.createStatement(); resp = st.executeUpdate("INSERT INTO clientes (endCli) values (nome)"); }catch(Exception e){ e.printStackTrace(); } } }

Classe principal

public class Principal { public static void main(String args[]){ new Dados().Incluir(); } }

eu ainda noõ consegui inserir nenhum dado em meu banco… da um monte de erros relacionados ao SQL…

Já melhorou. =)

Só falta uma convenção agora. Os métodos iniciam com letra minúscula. =)

E outro detalhe: nunca lance Exception. Dê uma lida nesse artigo.

Com Statement, você precisa concatenar a String que contém o SQL. Assim:

resp = st.executeUpdate("INSERT INTO clientes (endCli) values (\"" + nome + "\")");

Verifique se no MySQL a String é usada com aspas simples ( ’ ) ou aspas duplas ( " ).

Da forma como está fazendo, você não está tentando inserir o conteúdo da variável e sim tentando adicionar a String nome, sem aspas.

Eu sempre sugiro o uso de PreparedStatement, pois acredito que deixa o código mais limpo:

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

public class Dados {  
	public void incluir(){  
		Connection con = Conectar.getConnection();  
		String nome = "José";  
		int resp = 0;  
		try{  
			PreparedStatement stmt = con.prepareStatement("INSERT INTO clientes (endCli) values (?)");
			stmt.setString(1, nome);
			resp = stmt.executeUpdate();
			
		}catch(SQLException e){
			// Nunca lance uma Exception, trate a Exception correta
			// do bloco
			e.printStackTrace();  
		}  
	}  
} 

Se mesmo assim continuar com problemas, adicione o StackTrace no seu proximo post.

EDIT: Teste também com um nome sem acento.

EDIT: Feche Connection, ResultSet e PreparedStatement no bloco finally. Com isso, o SQLException será lançada para o chamador do método. Dessa forma:

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

public class Dados {  
	public void incluir() throws SQLException{  
		Connection con = Conectar.getConnection();
		PreparedStatement stmt = null;
		String nome = "José";  
		int resp = 0;  
		try{  
			stmt = con.prepareStatement("INSERT INTO clientes (endCli) values (?)");
			stmt.setString(1, nome);
			resp = stmt.executeUpdate();
			
		}finally {
			stmt.close();
			con.close();
		}
	}  
}

FICO REALMENTE GRATO A TODOS… POR ME AJUDAREM, VOU TESTAR AS DICAS QUE FORAM POSTADAS E ASSIM… QUE EU CONSEGUIR ALGUM RESULTADO, EU VOLTAREI A POSTAR.

:smiley:

Sei que esse post é antigo, mas estava procurando algo relacionado, me deparei com ele, e decidi postar uma classe de conexão que criei pra facilitar o desenvolvimento dos meus projetos da faculdade.

Ela é bem simples, e de fácil compreenção, até mesmo pra iniciantes.
Resume-se a 3 métodos:

connect();
disconnect()
runSQL();

1 - quando precisar realizar alguma operação no banco, instancie a classe de conexão (nao uso os metodos como static pq às vezes é preciso realizar operações em paralelo, até com bancos diferentes)
2 - chame o método connect();
3 - chame o método runSQL, passando um commando sql qualquer(SELECT, DELETE, etc)
3 - trate as informações do resultset como desejar
4 - chame o método disconnect();

a classe:


package dataBaseConnectors;

import dataType.DataBaseConnectionParams;

import com.mysql.jdbc.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MySQLConnector {

    private final String driver = "com.mysql.jdbc.Driver";
    private String url = null;    
    private String userName = null;
    private String password = null;   
    private Connection connection;
    private Statement statement;
    public ResultSet resultset;

    public MySQLConnector(DataBaseConnectionParams dbConnectionParams) {       
        this.userName = dbConnectionParams.getDataBaseUserName();
        this.password = dbConnectionParams.getDataBasePassword();

        url = "jdbc:mysql://" + dbConnectionParams.getDataBaseMachineIP() + ":"
                + dbConnectionParams.getDataAccessPort() + "/"
                + dbConnectionParams.getDataBaseName();
    }

    public boolean connect()
    {
        boolean result = true;
             
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(url, userName, password);
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
            result = false;
        } catch (SQLException ex){
            ex.printStackTrace();
            result = false;
        }        
        return result;
    }

    public boolean disconnect(){
        boolean result = true;
        try{
            connection.close();
        }
        catch(SQLException ex){
            ex.printStackTrace();
            result = false;
        }
        catch(NullPointerException ex){
            result = false;
            System.out.println("Não foi possível fechar a conexão com o banco. "
                    + "\nNão há conexão aberta\n");
            ex.printStackTrace();;
        }
        return result;
    }

    public void runSQL(String sql){
        
        try{
            statement = (Statement) connection.createStatement();
            resultset = statement.executeQuery(sql);
        }
        catch(SQLException ex){
            System.out.println("Não foi  possível executar o comando SQL\n");
            ex.printStackTrace();
        }
        catch(NullPointerException ex){
            System.out.println("Banco de Dados indisponível");
            ex.printStackTrace();
        }        
    }
    
}

Pode-se tambem limpar o construtor e dar os valores dos atributos logo na declaração.

Espero que ajude alguém.