{"id":2684,"date":"2020-04-22T17:35:00","date_gmt":"2020-04-22T20:35:00","guid":{"rendered":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/?p=2684"},"modified":"2025-09-02T13:58:18","modified_gmt":"2025-09-02T16:58:18","slug":"conexao-mysql-java","status":"publish","type":"post","link":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/2020\/04\/22\/conexao-mysql-java","title":{"rendered":"Conex\u00e3o MySQL \/ JAVA"},"content":{"rendered":"\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

Nesta edi\u00e7\u00e3o iremos aprender a estabelecer uma conex\u00e3o MYSQL com JAVA e quatro opera\u00e7\u00f5es b\u00e1sicas: cria\u00e7\u00e3o (CREATE), consulta (READ), atualiza\u00e7\u00e3o (UPDATE) e destrui\u00e7\u00e3o (DELETE) para trabalhar com os dados do Banco de Dados, caracterizando o acr\u00f4nimo CRUD. Acesse o link do\u00a0GitHub\u00a0<\/a><\/span>para acesso ao c\u00f3digo e melhor acompanhamento da reda\u00e7\u00e3o.<\/p>\n

Para come\u00e7ar, deve ser feito o download e a instala\u00e7\u00e3o do\u00a0MySQL Server<\/a><\/span>\u00a0bem como a da IDE que se deseja utilizar (NetBeans, Intelij IDEA, Eclipse, etc.). Em seguida, precisamos do driver de conex\u00e3o entre o Java e o MySQL, o mysqlconnector. Drivers retornam dados consultados em um formato relacional e fornecem conectividade entre banco de dados por meio das interfaces de programa aplicativo (APIs) JDBC dispon\u00edveis na plataforma Java. O JDBC (Java Database Connectivity) descreve uma lista de m\u00e9todos SQL que um programador Java pode usar para acessar um banco de dados relacional. Neste tutorial, estamos utilizando a vers\u00e3o “mysql-connector-java-8.0.17.jar<\/a><\/span>“, bem como o\u00a0Netbeans IDE 8.2<\/a><\/span>.<\/p>\n

Ap\u00f3s as instala\u00e7\u00f5es, poderemos iniciar nosso projeto. No NetBeans, insira o conector na pasta “Bibliotecas” do seu projeto, como nas figuras a seguir:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

\n
\n
\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\"\"<\/div>\n
\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

Em seguida, crie um pacote em \u201cPacotes de C\u00f3digos-fonte\u201d para onde ser\u00e1 colocada a classe da conex\u00e3o com o banco. Nesse pacote, crie uma nova Classe Java para a sua classe de conex\u00e3o.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

\n
\n
\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

Para ser feita uma conex\u00e3o com o banco de dados, utilizamos um driver. Assim sendo, utilizamos a classe DriverManager para a comunica\u00e7\u00e3o com esses drivers. Com o m\u00e9todo getConnection, por sua vez, podemos informar com qual o banco devemos realizar a nossa conex\u00e3o, o usu\u00e1rio e a senha. O primeiro par\u00e2metro passado por esse m\u00e9todo \u00e9 a URL, uma String, que varia de acordo com o conector que se est\u00e1 utilizando. Neste exemplo, estamos usando o “mysql-connector-java-8.0.17.jar”, logo, essa String possui a seguinte formata\u00e7\u00e3o:<\/p>\n

URL = jdbc:mysql:\/\/ localhost:port\/nome_do_banco?useTimezone=true&serverTimezone=UTC<\/code><\/p>\n

Os pr\u00f3ximos par\u00e2metros s\u00e3o o usu\u00e1rio e a senha de acesso ao banco de dados, respectivamente:<\/p>\n

DriverManager.getConnection(URL, USER, PASS);<\/code><\/p>\n

Classe de conex\u00e3o:<\/p>\n

package DatabaseConnection;<\/code><\/p>\n

import java.sql.Connection;<\/code><\/p>\n

import java.sql.DriverManager;<\/code><\/p>\n

import java.sql.SQLException;<\/code><\/p>\n

public class Conexao{<\/code><\/p>\n

\/\/ Informamos qual o Driver que est\u00e1 sendo utilizado<\/code><\/p>\n

private static final String DRIVER = \"com.mysql.cj.jdbc.Driver\";<\/code><\/p>\n

private static final String URL = \"jdbc:mysql:\/\/localhost:3306\/pet?useTimezone=true&serverTimezone=UTC\";<\/code><\/p>\n

private static final String USER = \"root\";<\/code><\/p>\n

private static final String PASSWORD = \"senha\";<\/code><\/p>\n

public static Connection getConnection() throws SQLException, ClassNotFoundException {<\/code><\/p>\n

try{<\/code><\/p>\n

\u00a0\/\/ O m\u00e9todo forName carrega e inicia o driver passado por par\u00e2metro<\/code><\/p>\n

Class.forName(DRIVER);<\/code><\/p>\n

\u00a0\/\/ Estabelecendo a conex\u00e3o<\/code><\/p>\n

return DriverManager.getConnection(URL, USER, PASSWORD);<\/code><\/p>\n

}catch(ClassNotFoundException | SQLException ex){ \/\/ Tratamento de Exce\u00e7\u00f5es<\/code><\/p>\n

System.out.println(ex);<\/code><\/p>\n

return null;<\/code><\/p>\n

}<\/code><\/p>\n

}<\/code><\/p>\n

}<\/code><\/p>\n

Agora, com a conex\u00e3o estabelecida, podemos gerar as classes que ir\u00e3o se relacionar com o banco de dados, buscando, alterando, inserindo e excluindo dados. Assim sendo, precisamos criar mais dois pacotes, um para as classes DAO e um para as classes bean.\u00a0 As classes DAO \u2013 Data Access Object \u2013 s\u00e3o as classes que fazem o interm\u00e9dio com o banco de dados, fazendo conex\u00f5es e transa\u00e7\u00f5es com o mesmo. J\u00e1 as classes bean, elas possuem todos os atributos privados (as colunas das tabelas do banco de dados) bem como os m\u00e9todos getters e setters destes. Exemplo de classe bean:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

\n
\n
\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
Pacotes j\u00e1 criados<\/small><\/div>\n
\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
Exemplo de classe Bean<\/small><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
\n
\u00a0<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\u00a0<\/div>\n
Dica<\/strong>: para gerar os getter e setters automaticamente no NetBeans: pressione Alt+Insert e selecione getter e setters e, a seguir, ser\u00e1 aberta uma janela em que poder\u00e3o ser selecionados os atributos sobre os quais se deseja que sejam gerados esses m\u00e9todos.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
\n
\u00a0<\/div>\n
\n
\n
\u00a0<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\u00a0<\/div>\n
\u00a0<\/div>\n
\"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\u00a0 \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
\n
\u00a0<\/div>\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

\u00a0<\/p>\n

Criadas as classes bean, podemos nos dirigir \u00e0 cria\u00e7\u00e3o das classes DAO. Para a constru\u00e7\u00e3o dessas classes, \u00e9 necess\u00e1rio ter um conhecimento pr\u00e9vio na linguagem SQL, uma vez que \u00e9 atrav\u00e9s dela que a comunica\u00e7\u00e3o \u00e9 feita com o banco de dados. Primeiramente, precisamos buscar uma conex\u00e3o com o banco de dados. Isso \u00e9 feito por meio do m\u00e9todo getConnection(). A seguir, utilizamos o PreparedStatement, que \u00e9 usado para consultas parametrizadas, formatando os valores \u2013 inserindo dados de forma mais segura.<\/p>\n

Exemplo de um m\u00e9todo para inser\u00e7\u00e3o de dados no banco de dados:<\/p>\n

\/\/ O retorno \u00e9 vazio, e recebe um objeto do tipo Membros<\/code><\/p>\n

public void Insert(Membros m) throws SQLException, ClassNotFoundException{<\/code><\/p>\n

Connection con = Conexao.getConnection(); \/\/ Busca uma conex\u00e3o com o banco de dados<\/code><\/p>\n

PreparedStatement stmt = null;<\/code><\/p>\n

try{<\/code><\/p>\n

\u00a0\/\/ Inserindo o comando SQL a ser usado<\/code><\/p>\n

stmt = con.prepareStatement(\"INSERT INTO membros VALUES (DEFAULT, ?)\");<\/code><\/p>\n

\u00a0\/\/ O m\u00e9todo setString, define que o valor passado ser\u00e1 do tipo inteiro<\/code><\/p>\n

\u00a0stmt.setString(1, m.getNome());<\/code><\/p>\n

\u00a0\/\/ M\u00e9todo respons\u00e1vel por fazer a altera\u00e7\u00e3o no banco de dados<\/code><\/p>\n

stmt.executeUpdate();\u00a0<\/code><\/p>\n

}catch(SQLException ex){\u00a0 \/\/ Tratamento das exce\u00e7\u00f5es<\/code><\/p>\n

System.out.println(ex);<\/code><\/p>\n

} finally{ \/\/ Encerramento da conex\u00e3o<\/code><\/p>\n

Conexao.closeConnection(con, stmt);<\/code><\/p>\n

}<\/code><\/p>\n

}<\/code><\/p>\n

Note que, os valores que s\u00e3o auto-increment\u00e1veis, n\u00e3o s\u00e3o passados atrav\u00e9s do m\u00e9todo get, como \u00e9 o caso do ID no exemplo.<\/p>\n

O m\u00e9todo para altera\u00e7\u00e3o, bem como para remo\u00e7\u00e3o de dados \u00e9 semelhante ao da inser\u00e7\u00e3o, diferindo apenas no comando SQL utilizado.<\/p>\n

Agora, desenvolveremos um exemplo de busca de dados no banco de dados. Tendo em vista que, ao ser realizada uma busca (SELECT) em um banco de dados, recebemos como retorno v\u00e1rios itens\/linhas. Assim, trataremos esses dados como uma lista de informa\u00e7\u00f5es, ou seja, o retorno desse m\u00e9todo deve ser uma lista.<\/p>\n

Exemplo de um m\u00e9todo para busca de dados:<\/p>\n

\/\/ O retorno \u00e9 uma lista<\/code><\/p>\n

public List<Membros> Select () throws SQLException, ClassNotFoundException{<\/code><\/p>\n

Connection con = Conexao.getConnection(); \/\/ Busca uma conex\u00e3o com o banco de dados<\/code><\/p>\n

PreparedStatement stmt = null;<\/code><\/p>\n

ResultSet rs = null; \/\/ Objeto que armazena o resultado de uma busca em uma estrutura de dados que pode ser percorrida<\/code><\/p>\n

\/\/ Instanciando uma nova lista para receber os valores do banco<\/code><\/p>\n

List<Membros>membros = new ArrayList<>();<\/code><\/p>\n

try{<\/code><\/p>\n

\u00a0\/\/ Inserindo o comando SQL a ser usado<\/code><\/p>\n

stmt = con.prepareStatement(\"SELECT * FROM membros\");<\/code><\/p>\n

rs = stmt.executeQuery(); \/\/ Executa o comando SQL<\/code><\/p>\n

\u00a0\/* Loop respons\u00e1vel pela busca dos dados no banco que o repetir\u00e1 at\u00e9 que n\u00e3o<\/code><\/p>\n

\u00a0haja valores *\/<\/code><\/p>\n

while(rs.next()){<\/code><\/p>\n

Membros mem = new Membros();<\/code><\/p>\n

mem.setId(rs.getInt(\"id\"));<\/code><\/p>\n

mem.setNome(rs.getString(\"nome\"));<\/code><\/p>\n

membros.add(mem); \/\/ Adiciona o objeto na lista<\/code><\/p>\n

}<\/code><\/p>\n

}catch(SQLException ex){ \/\/ Tratamento das exce\u00e7\u00f5es<\/code><\/p>\n

Logger.getLogger(MembrosDAO.class.getName()).log(Level.SEVERE, null, ex);<\/code><\/p>\n

}<\/code><\/p>\n

return membros;\u00a0 \u00a0\/\/ Retorna a lista<\/code><\/p>\n

}<\/code><\/p>\n

Tendo as classes DAO e bean, resta apenas o desenvolvimento de uma interface com o usu\u00e1rio. Dessa forma, pode-se testar a conex\u00e3o e suas intera\u00e7\u00f5es com o banco de dados. Esse \u00e9 um ponto de partida para as aplica\u00e7\u00f5es que precisem usar bancos de dados e \u00e9 extremamente importante sabermos lidar com essa intera\u00e7\u00e3o e, embora possa parecer complexo, uma vez que se entenda o funcionamento dos m\u00e9todos necess\u00e1rios, vemos que n\u00e3o \u00e9 t\u00e3o complicado assim.<\/p>\n

\u00a0<\/div>\n
\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\nRefer\u00eancias:<\/div>\n

http:\/\/www.codeacademy.com\/articles\/what-is-crud<\/a><\/span><\/p>\n

http:\/\/www.linhadecodigo.com.br\/artigo\/832\/overview-de-javabeans.aspx<\/a><\/span><\/p>\n

http:\/\/pt.stackoverflow.com\/questions\/113840\/como-funciona-o-padr%C3%A3o-dao<\/a><\/span><\/p>\n

http:\/\/www.guj.com.br\/t\/classe-dao\/71523\/3<\/a><\/span><\/p>\n

http:\/\/www.guj.com.br\/t\/class-forname\/96650\/3<\/a><\/span><\/p>\n

http:\/\/www.devmedia.com.br\/classe-de-conexao-em-java-no-netbeans-driver-mysql\/18804<\/a><\/span><\/p>\n

http:\/\/www.guj.com.br\/t\/re-resultset-pra-q-isso-serve\/31507<\/a><\/span><\/p>\n

http:\/\/www.guj.com.br\/t\/o-que-e-preparedstatement-e-para-que-serve\/86774\/2<\/a><\/span><\/p>\n

http:\/\/www.javatpoint.com\/PreparedStatement-interface<\/a><\/span><\/p>\n

http:\/\/www.devmedia.com.br\/jdbc-tutorial\/6638<\/a><\/span><\/p>\n

http:\/\/docs.microsoft.com\/pt-br\/sql\/connect\/jdbc\/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15<\/a><\/span><\/p>\n

http:\/\/www.mindprod.com\/jgloss\/jdbc.html<\/a><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"

Nesta edi\u00e7\u00e3o iremos aprender a estabelecer uma conex\u00e3o MYSQL com JAVA e quatro opera\u00e7\u00f5es b\u00e1sicas: cria\u00e7\u00e3o (CREATE), consulta (READ), atualiza\u00e7\u00e3o (UPDATE) e destrui\u00e7\u00e3o (DELETE) para trabalhar com os dados do Banco de Dados, caracterizando o acr\u00f4nimo CRUD. Acesse o link do\u00a0GitHub\u00a0para acesso ao c\u00f3digo e melhor acompanhamento da reda\u00e7\u00e3o. Para come\u00e7ar, deve ser feito o […]<\/p>\n","protected":false},"author":2948,"featured_media":2682,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,112],"tags":[196,149],"class_list":["post-2684","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-redacao","tag-back-end-e-bd","tag-redacao"],"acf":[],"_links":{"self":[{"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/users\/2948"}],"replies":[{"embeddable":true,"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/comments?post=2684"}],"version-history":[{"count":0,"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2684\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/2682"}],"wp:attachment":[{"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=2684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=2684"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=2684"}],"curies":[{"name":"wp","href":"http:\/\/api.w.org\/{rel}","templated":true}]}}