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.
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.
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.