<Insert Picture Here>




Tutorial MySQL com Java
                                Airton Lastori
                          airton.lastori@oracle.com

                                         08-out-2012
Alguns clientes MySQL




 Web & Enterprise           OEM & ISVs



                    Cloud

                     2
Várias Indústrias




             mysql.com/customers

                       3
Quando usar MySQL?




        4
Resumo: onde o MySQL se encaixa
• Novas aplicações e aplicações customizadas Ad-hoc
    •   principalmente arquitetura Web (ex. Linux+Apache+MySQL+Java)
    •   arquiteturas inovadoras, NoSQL (versão 5.6 e Cluster 7.2)
• Aplicações híbridas
    •   expansão de sistemas legados
    •   MySQL como front-end e Oracle DB como back-end
• Online e SaaS
    •   E-commerce/OLTP e pagamentos digitais
    •   Gerenciamento de Conteúdo (CMS)
    •   Redes Sociais, mensagens e colaboração
    •   Games Sociais e MMO
    •   Gerenciamento de Sessão e Autenticação do usuário
• Datamarts e Relatórios Departamentais
• SMS, e-marketing, Infra Telecom, Infra TI
• Embarcadas

                                            5
MySQL em Aplicações Enterprise

                                         Aplicações Corporativas de Missão Crítica
Importancia/Complexidade



                                                   Finanças Globais, ERP, SCM, CRM, HR



                                                Aplicações Críticas para o Negócio
                                                   Impacto no negócio, Interdepartamentais



                                                             Aplicações Operacionais
                                                               De suporte, Departamentais




                           Corporativo                 Departamental
                                               6
Quando custa o MySQL?




          7
Portfolio Open Source (GPL)


• MySQL Database (Community Server)         5.5.27 GA e 5.6.6 DMR

• MySQL Cluster (NDB Community) 7.2.7 GA
• MySQL Workbench Community Edition              5.2.40 GA
   • MySQL Utilities (em Python)
• MySQL Connectors
   • ODBC, Java, .Net, C, C++, PHP, OpenOffice
• MySQL Proxy 0.8.2 Alpha
• Documentação: livre para uso, não coberto pela GPL
• Forums
                  dev.mysql.com/downloads

                              8
MySQL Enterprise Edition.
Indicado para empresas ou pessoas físicas que pretendem
aumentar produtividade, diminuir riscos e explorar mais
a fundo e aumentar as capacidades do MySQL.

                             Oracle Premier
                            Lifetime Support
              MySQL Enterprise              Oracle Product
                  Security            Certifications/Integrations

         MySQL Enterprise                        MySQL Enterprise
              Audit                            Monitor/Query Analyzer

   MySQL Enterprise                                   MySQL Enterprise
      Scalability                                         Backup

 MySQL Enterprise
                                                         MySQL Workbench
  High Availability
Arquitetura do MySQL
MySQL Database
     Performance, Confiabilidade, Facilidade de Uso
                                                Gerenciamento
      Suporte às mais
                                                eficiente e multi-
      conhecidas
                                                thread de sessões
      plataformas/linguagens
      de desenvolvimento


Parsing completo
DML+DDL,
otimizador,
baseado em custo,
caching de queries
e resultados



 Várias opções de
 Storage Engine
 para necessidades
 específicas das
 aplicações

                                                Opções flexíveis de
                                                logging e
                                                armazenamento
                                                físico
InnoDB no MySQL
- Storage Engine mais utilizado
    - aplicações Web 2.0
    - aplicações de varejo
    - aplicações de entretenimento & mídia
-   ACID, transacional
-   Crash recovery
-   Integridade referencial
-   Suporta altos níveis de usuários concorrentes
-   No MySQL versão 5.5
    - padrão
    - otimizado para hardware multi-core, multi-thread e SOs
Como instalar o MySQL?
MySQL Installer for Windows
• Interface gráfica nativa do
  Windows
• Todos produtos MySQL para
  desenvolvimento em UM único
  pacote
   •   MySQL Database
   •   MySQL Connectors
   •   MySQL Workbench e exemplos de
       modelos
   •   Exemplos de bancos de dados
   •   Documentação
• Alta integração de produtos,
  download sob demanda,
  funcionalidades de atualização
MySQL Installer for Windows
   Selecione


                  Atualize


                               Configure




mysql.com/downloads
No Linux ou Mac, prefira os binários




       mysql.com/downloads/mysql
Tutorial MySQL em 10 minutos




slideshare.net/MySQLBR/mysql-em-10min-alexandre-almeida-hti-tecnologia
No Linux ou Mac, instale também o
Connector/J




    mysql.com/downloads/connector/j
Teste via MySQL Workbench 1/2
Teste via MySQL Workbench 2/2
Teste via MySQL Client
(opcional)

C:Program FilesMySQLMySQL Server 5.5bin>mysql -uroot -p
Enter password: ****
Welcome to the MySQL monitor.   Commands end with ; or g.
Your MySQL connection id is 8
Server version: 5.5.28 MySQL Community Server (GPL)


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or 'h' for help. Type 'c' to clear the current input
   statement.


mysql>
Administre via MySQL Workbench 1/3
Administre via MySQL Workbench 2/3
Administre via MySQL Workbench 3/3
Parar ou Iniciar o servidor MySQL
(opcional)




Ou via MySQL Notifier
Tudo certo com seu ambiente Java? 1/2
Instalar e configurar JDK e path

oracle.com/technetwork/java/javase/downloads
Tudo certo com seu ambiente Java? 2/2
JDK e path configurados

C:Program FilesMySQLMySQL Server 5.5bin>java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)


C:Program FilesMySQLMySQL Server 5.5bin>javac
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging inf
...o
Hello world MySQL!
Adicione o driver MySQL ao CLASSPATH
caminho completo do .jar




Confira:
C:>set CLASSPATH
CLASSPATH=.;C:Program Files (x86)Javajre6libextQTJava.zip;C:Program Files
MySQLmysql-connector-java-5.1.22mysql-connector-java-5.1.22-bin.jar
HelloMysql.java 1/2

import java.sql.*;
public class HelloMysql {
 public static void main(String args[]){
 System.out.println("Tentando conectar ao MySQL...");
 try {
   Class.forName("com.mysql.jdbc.Driver");
   String url = "jdbc:mysql://localhost:3306/mysql";
   String usuario = "root";
   String senha = "root";
   Connection con = DriverManager.getConnection(url, usuario, senha);
   System.out.println("URL: " + url);
   System.out.println("Connection: " + con);



                                                        Continua…
HelloMysql.java 2/2

   Statement stmt = con.createStatement();   //objeto Statement
   ResultSet rs;       //objeto ResultSet
   rs = stmt.executeQuery("SELECT * FROM world.country");
   System.out.println("Ola mundo!");
   while(rs.next()){
   String nomePais = rs.getString("Name");
    System.out.print(nomePais + ", ");
   }//end while
   con.close();
  } catch( Exception e ) {
   e.printStackTrace();
  }//end catch
 }//end main
}//end class HelloMysql

                                                                  FIM!
java HelloMysql
C:tutorial>javac HelloMysql.java


C:tutorial>java HelloMysql
Tentando conectar ao MySQL...
URL: jdbc:mysql://localhost:3306/mysql
Connection: com.mysql.jdbc.JDBC4Connection@ed07f45
Ola mundo!
Aruba, Afghanistan, Angola, Anguilla, Albania, Andorra, Netherlands Antilles, Un
ited Arab Emirates, Argentina, Armenia, American Samoa, Antarctica, French South
ern territories, Antigua and Barbuda, Australia, Austria, Azerbaijan, Burundi, B
elgium, Benin, Burkina Faso, Bangladesh, Bulgaria, Bahrain, Bahamas, Bosnia and
Herzegovina, Belarus, Belize, Bermuda, Bolivia, Brazil, Barbados, Brunei, Bhutan
, Bouvet Island, Botswana, Central African Republic, Canada, Cocos (Keeling) Isl
ands, Switzerland, Chile, China, Côte d’Ivoire, Cameroon, Congo, The Democrati
c Republic of the, Congo, Cook Islands, Colombia, Comoros, Cape Verde, Costa Ric
a, Cuba, Christmas Island, Cayman Islands, Cyprus, Czech Republic, Germany, Djib
…
ietnam, Vanuatu, Wallis and Futuna, Samoa, Yemen, Yugoslavia, South Africa, Zamb
ia, Zimbabwe,
Revisão: Conceitos importantes

• Como conectar o Java ao MySQL

• Entender o CLASSPATH




                         34
Revisão: conectando o Java ao MySQL

• O driver JDBC é chamado MySQL Connector/J
   • Desenvolvido pela Oracle sob licença GPL
• Driver Type IV (todo java, nativo)
• Disponível para baixar em:
    • Software
        • dev.mysql.com/downloads/connector/j
        • Maven, Ivy
        • Many Linux and BSD distributions
    • Documentation
        • dev.mysql.com/doc/refman/5.5/en/connector-j.html




                                35
Revisão: Entendendo o CLASPATH

• O classpath é o local onde o Java procura por código
  compilado (biblioteca)
• Há locais padrão para o classpath
     • WEB-INF/lib, WEB-INF/classes in webapps
     • $JRE_HOME/lib/ext
• Quando estiver desenvolvendo ou implantando evite
  estes locais
     • $JRE_HOME/lib/ext
     • Application-server-wide
        • e.g. $CATALINA_HOME/lib
• Se possível deixe este trabalho para sua IDE


                           36
Crie um usuário no MySQL.




            37
Criando usuário
      public User createUser(Connection c, String                   } catch (SQLException sqlEx) {
login, String firstName, String lastName, String
                                                                           // handle it, it's not a concern outside
credentials) {
                                                         of persistence
           PreparedStatement p = null;                              } finally {
           try {                                                           try {
                 p = c.prepareStatement("INSERT
                                                                                   if (p != null) { p.close(); };
INTO user (login, first_name, last_name,
passwd_hash) VALUES (?, ?, ?, ?)");                                        } catch (SQLException sqlEx) {
                    p.setString(1, login);                                         // can't do anything here, log?
                    p.setString(2, firstName);                             }
               ResultSet rs =                                       }
p.getGeneratedKeys();                                         }
                    rs.next();
                    long id = rs.getLong(1);
                    PersistentUser user = new
PersistentUser();                                                            Estes tipos de
                    user.setId(id);                                     acesso é conhecido
                    return user;
                                                                         como Raw JDBC…

                                                    38
Arquitetando para o sucesso
        com MySQL!

          Applications start small
          If they’re successful, they don’t stay that way
Arquitetando para o Sucesso
Um Anti-Pattern

                                  Presentation
                                                    Presentation
                               Presentation
                     Presentation
                      Presentation               Presentation
                  Presentation    Presentation
                                    Presentation
   BusinessLogic               Presentation Presentation
                          Presentation
                  BusinessLogic                    BusinessLogic
                                         Presentation
                                        Presentation
               BusinessLogic          BusinessLogic BusinessLogic
                                                   BusinessLogic
                         BusinessLogicBusinessLogic        Persistence
           BusinessLogic        Persistence                        Persistence
                          BusinessLogic              Persistence
                  BusinessLogic              BusinessLogic
  Persistence
                  BusinessLogic BusinessLogic              Persistence
                         Persistence
                                Persistence                        Persistence
                                   BusinessLogic     Persistence
  Persistence                                                       Persistence
                         Persistence Persistence                            Persistence
                                                             Persistence
          Persistence
                                  Persistence




                                           40
Arquitetando para o Sucesso
    Um Anti-Pattern
Quero usar uma lógica daqui…
                                  Presentation
                                                      Presentation
                                 Presentation
                       Presentation
                        Presentation
                    Presentation    Presentation
                                      Presentation
                                                   Presentation
                                                                         …aplicar aqui…
     BusinessLogic               Presentation Presentation
                            Presentation
                    BusinessLogic                    BusinessLogic
                                           Presentation
                                          Presentation
                 BusinessLogic          BusinessLogic BusinessLogic
                                                     BusinessLogic
                           BusinessLogicBusinessLogic        Persistence          …no contexto
             BusinessLogic        Persistence                        Persistence
                            BusinessLogic              Persistence                           desta
                    BusinessLogic              BusinessLogic
    Persistence
                    BusinessLogic BusinessLogic              Persistence                 trasação.
                           Persistence
                                  Persistence                        Persistence
                                     BusinessLogic     Persistence
    Persistence                                                       Persistence
                           Persistence Persistence                            Persistence
                                                               Persistence
            Persistence
                                    Persistence




                                                 41
Arquitetando para o Sucesso
Comece limpo


                Presentation




               Business Logic




                Persistence




                      42
Arquitetando para o Sucesso
       Comece limpo


                       Presentation


Transactions




                      Business Logic




                       Persistence




                             43
Arquitetando para o Sucesso
          Comece limpo


                          Presentation


Transactions




                         Business Logic


Caching



                          Persistence




                                44
Arquitetando para o Sucesso
          Comece limpo


                          Presentation    } Test this

Transactions




                         Business Logic   } Test this

Caching



                          Persistence     } Test this



                                45
Arquitetando para o Sucesso
Use ferramentas adequadas

• Using Maven to manage the depedencies/build

• Using SpringFramework
    • Dependency Injection
    • Templates/Boilerplate/Integration

• Uma boa IDE: NetBeans, Eclipse




                               46
Arquitetura em Camadas
    Exemplo Criar Usuário
         @Override
     public User createUser(String login, String firstName, String lastName, String credentials) {
         jdbcTemplate.update("INSERT INTO user (login, first_name, last_name, passwd_hash)
VALUES (?, ?, ?, ?)", login, firstName, lastName, credentials);


           long id = jdbcTemplate.queryForLong("SELECT LAST_INSERT_ID()");


           PersistentUser user = new PersistentUser();
           user.setId(id);
           user.setLogin(login);
           user.setFirstName(firstName);
           user.setLastName(lastName);
           user.setCredentials(credentials);


           return user;
     }


                                                     47
Como era no Raw JDBC
      public User createUser(Connection c, String                   } catch (SQLException sqlEx) {
login, String firstName, String lastName, String
                                                                           // handle it, it's not a concern outside
credentials) {
                                                         of persistence
           PreparedStatement p = null;                              } finally {
           try {                                                           try {
                 p = c.prepareStatement("INSERT
                                                                                   if (p != null) { p.close(); };
INTO user (login, first_name, last_name,
passwd_hash) VALUES (?, ?, ?, ?)");                                        } catch (SQLException sqlEx) {
                    p.setString(1, login);                                         // can't do anything here, log?
                    p.setString(2, firstName);                             }
               ResultSet rs =                                       }
p.getGeneratedKeys();                                         }
                    rs.next();
                    long id = rs.getLong(1);
                    PersistentUser user = new
PersistentUser();                                                            Estes tipos de
                    user.setId(id);                                     acesso é conhecido
                    return user;
                                                                         como Raw JDBC…

                                                    48
Resolvendo erros comuns
      com MySQL!



           65
Class not found

• java.lang.ClassNotFoundException:
 com.mysql.jdbc.Driver
   • The driver is not in your CLASSPATH
   • Standalone applications with framework-managed
     CLASSPATH help with this, i.e WEB-INF/lib, or mvn or ant-
     managed CLASSPATH




                              66
No Suitable Driver

• SQLException: No suitable driver
    • Check your URL, compare to the documentation at
     http://dev.mysql.com/doc/refman/5.1/en/connector-j.html


• Your URL should look something like
 jdbc:mysql://host:port/database[...]




                              67
Out of Memory

• java.lang.OutOfMemoryError when reading results
    • Your result set is too large, Connector/J buffers results by
      default
    • Most use cases don’t require large result sets
    • Those that do, process in chunks via SELECT ... LIMIT, or
      Statement.setFetchSize(Integer.MIN_VALUE)
• Heap dump shows many statement, result set
 instances
    • Not closing resources on every code path
    • Frameworks help prevent this
    • Plumb try {} catch {} finally {} throughout your code (yuck!)


                                  68
Communications Exceptions
• "The last packet sent successfully to the server was 0
 milliseconds ago. The driver has not received any packets
 from the server."
   • Your server was started with --skip-networking or --bind-
     address=127.0.0.1 and your client is remote to the server

• “The last packet successfully received from the server was
 25899 milliseconds ago.The last packet sent successfully to
 the server was 25899 milliseconds ago, which is longer than
 the server configured value of 'wait_timeout'”
   • Connections are sitting idle too long in your pool
   • Configure your pool to evict idle connections before
     wait_timeout would expire
   • Don’t let connections idle much more than the amount of
     time it takes to create a new one under worst-case

                                 69
Devo migrar para MySQL?




           70
MySQL Migration Tool                              Novo!

• Wizard para migração de tabelas e dados:
  • MS-SQL Server 2000, 2005, 2008 e 2012.
  • SGBDs em geral via ODBC
  • Mapeamento personalizado (opcional)
  • Integrado ao Workbench open source e gratuito

Download:
mysql.com/downloads
Documentação:
dev.mysql.com/doc/workbench/en/wb-migration.html

                          71
72
Próximos passos com MySQL




            73
Referências
• Use MySQL with Java
 http://dev.mysql.com/usingmysql/java/


• Read Connector/J User Manual
 http://dev.mysql.com/doc/refman/5.5/en/connector-j.html


• Download MySQL 5.5
 http://www.mysql.com/downloads/mysql/


• Download Free MySQL White Papers
 http://dev.mysql.com/why-mysql/white-papers/


• View MySQL Training Courses
 http://mysql.com/training


                                   74
MySQL Treinamento e Certificação

       Treinamentos
  MySQL DBA           MySQLDeveloper                Certificações
MySQL Boot Camp        MySQL Boot Camp
  Accelerated            Accelerated

MySQL Performance     MySQL Performance
 Tuning Boot Camp      Tuning Boot Camp
    Accelerated           Accelerated

MySQL for Begginers   MySQL for Begginers

MySQL for Database     MySQL and PHP
  Administrators      Developing Dynamic
                       Web Applicationg
MySQL Performance
     Tuning           MySQL for Developers

   MySQL High          MySQL Advanced
    Availability       Stored Procedures

  MySQL Cluster
                                                                    Opcional
                                                                    Necessário
                             education.oracle.com

                                             75
Obrigado!




@MySQLBR    facebook.com/MySQLBR   meetup.com/MySQL-BR



                     76

Tutorial MySQL com Java

  • 1.
    <Insert Picture Here> TutorialMySQL com Java Airton Lastori airton.lastori@oracle.com 08-out-2012
  • 2.
    Alguns clientes MySQL Web & Enterprise OEM & ISVs Cloud 2
  • 3.
    Várias Indústrias mysql.com/customers 3
  • 4.
  • 5.
    Resumo: onde oMySQL se encaixa • Novas aplicações e aplicações customizadas Ad-hoc • principalmente arquitetura Web (ex. Linux+Apache+MySQL+Java) • arquiteturas inovadoras, NoSQL (versão 5.6 e Cluster 7.2) • Aplicações híbridas • expansão de sistemas legados • MySQL como front-end e Oracle DB como back-end • Online e SaaS • E-commerce/OLTP e pagamentos digitais • Gerenciamento de Conteúdo (CMS) • Redes Sociais, mensagens e colaboração • Games Sociais e MMO • Gerenciamento de Sessão e Autenticação do usuário • Datamarts e Relatórios Departamentais • SMS, e-marketing, Infra Telecom, Infra TI • Embarcadas 5
  • 6.
    MySQL em AplicaçõesEnterprise Aplicações Corporativas de Missão Crítica Importancia/Complexidade Finanças Globais, ERP, SCM, CRM, HR Aplicações Críticas para o Negócio Impacto no negócio, Interdepartamentais Aplicações Operacionais De suporte, Departamentais Corporativo Departamental 6
  • 7.
  • 8.
    Portfolio Open Source(GPL) • MySQL Database (Community Server) 5.5.27 GA e 5.6.6 DMR • MySQL Cluster (NDB Community) 7.2.7 GA • MySQL Workbench Community Edition 5.2.40 GA • MySQL Utilities (em Python) • MySQL Connectors • ODBC, Java, .Net, C, C++, PHP, OpenOffice • MySQL Proxy 0.8.2 Alpha • Documentação: livre para uso, não coberto pela GPL • Forums dev.mysql.com/downloads 8
  • 9.
    MySQL Enterprise Edition. Indicadopara empresas ou pessoas físicas que pretendem aumentar produtividade, diminuir riscos e explorar mais a fundo e aumentar as capacidades do MySQL. Oracle Premier Lifetime Support MySQL Enterprise Oracle Product Security Certifications/Integrations MySQL Enterprise MySQL Enterprise Audit Monitor/Query Analyzer MySQL Enterprise MySQL Enterprise Scalability Backup MySQL Enterprise MySQL Workbench High Availability
  • 10.
  • 11.
    MySQL Database Performance, Confiabilidade, Facilidade de Uso Gerenciamento Suporte às mais eficiente e multi- conhecidas thread de sessões plataformas/linguagens de desenvolvimento Parsing completo DML+DDL, otimizador, baseado em custo, caching de queries e resultados Várias opções de Storage Engine para necessidades específicas das aplicações Opções flexíveis de logging e armazenamento físico
  • 12.
    InnoDB no MySQL -Storage Engine mais utilizado - aplicações Web 2.0 - aplicações de varejo - aplicações de entretenimento & mídia - ACID, transacional - Crash recovery - Integridade referencial - Suporta altos níveis de usuários concorrentes - No MySQL versão 5.5 - padrão - otimizado para hardware multi-core, multi-thread e SOs
  • 13.
  • 14.
    MySQL Installer forWindows • Interface gráfica nativa do Windows • Todos produtos MySQL para desenvolvimento em UM único pacote • MySQL Database • MySQL Connectors • MySQL Workbench e exemplos de modelos • Exemplos de bancos de dados • Documentação • Alta integração de produtos, download sob demanda, funcionalidades de atualização
  • 15.
    MySQL Installer forWindows Selecione Atualize Configure mysql.com/downloads
  • 17.
    No Linux ouMac, prefira os binários mysql.com/downloads/mysql
  • 18.
    Tutorial MySQL em10 minutos slideshare.net/MySQLBR/mysql-em-10min-alexandre-almeida-hti-tecnologia
  • 19.
    No Linux ouMac, instale também o Connector/J mysql.com/downloads/connector/j
  • 20.
    Teste via MySQLWorkbench 1/2
  • 21.
    Teste via MySQLWorkbench 2/2
  • 22.
    Teste via MySQLClient (opcional) C:Program FilesMySQLMySQL Server 5.5bin>mysql -uroot -p Enter password: **** Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 8 Server version: 5.5.28 MySQL Community Server (GPL) Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
  • 23.
    Administre via MySQLWorkbench 1/3
  • 24.
    Administre via MySQLWorkbench 2/3
  • 25.
    Administre via MySQLWorkbench 3/3
  • 26.
    Parar ou Iniciaro servidor MySQL (opcional) Ou via MySQL Notifier
  • 27.
    Tudo certo comseu ambiente Java? 1/2 Instalar e configurar JDK e path oracle.com/technetwork/java/javase/downloads
  • 28.
    Tudo certo comseu ambiente Java? 2/2 JDK e path configurados C:Program FilesMySQLMySQL Server 5.5bin>java -version java version "1.7.0_07" Java(TM) SE Runtime Environment (build 1.7.0_07-b11) Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode) C:Program FilesMySQLMySQL Server 5.5bin>javac Usage: javac <options> <source files> where possible options include: -g Generate all debugging info -g:none Generate no debugging info -g:{lines,vars,source} Generate only some debugging inf ...o
  • 29.
  • 30.
    Adicione o driverMySQL ao CLASSPATH caminho completo do .jar Confira: C:>set CLASSPATH CLASSPATH=.;C:Program Files (x86)Javajre6libextQTJava.zip;C:Program Files MySQLmysql-connector-java-5.1.22mysql-connector-java-5.1.22-bin.jar
  • 31.
    HelloMysql.java 1/2 import java.sql.*; publicclass HelloMysql { public static void main(String args[]){ System.out.println("Tentando conectar ao MySQL..."); try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mysql"; String usuario = "root"; String senha = "root"; Connection con = DriverManager.getConnection(url, usuario, senha); System.out.println("URL: " + url); System.out.println("Connection: " + con); Continua…
  • 32.
    HelloMysql.java 2/2 Statement stmt = con.createStatement(); //objeto Statement ResultSet rs; //objeto ResultSet rs = stmt.executeQuery("SELECT * FROM world.country"); System.out.println("Ola mundo!"); while(rs.next()){ String nomePais = rs.getString("Name"); System.out.print(nomePais + ", "); }//end while con.close(); } catch( Exception e ) { e.printStackTrace(); }//end catch }//end main }//end class HelloMysql FIM!
  • 33.
    java HelloMysql C:tutorial>javac HelloMysql.java C:tutorial>javaHelloMysql Tentando conectar ao MySQL... URL: jdbc:mysql://localhost:3306/mysql Connection: com.mysql.jdbc.JDBC4Connection@ed07f45 Ola mundo! Aruba, Afghanistan, Angola, Anguilla, Albania, Andorra, Netherlands Antilles, Un ited Arab Emirates, Argentina, Armenia, American Samoa, Antarctica, French South ern territories, Antigua and Barbuda, Australia, Austria, Azerbaijan, Burundi, B elgium, Benin, Burkina Faso, Bangladesh, Bulgaria, Bahrain, Bahamas, Bosnia and Herzegovina, Belarus, Belize, Bermuda, Bolivia, Brazil, Barbados, Brunei, Bhutan , Bouvet Island, Botswana, Central African Republic, Canada, Cocos (Keeling) Isl ands, Switzerland, Chile, China, C├┤te d┬ÆIvoire, Cameroon, Congo, The Democrati c Republic of the, Congo, Cook Islands, Colombia, Comoros, Cape Verde, Costa Ric a, Cuba, Christmas Island, Cayman Islands, Cyprus, Czech Republic, Germany, Djib … ietnam, Vanuatu, Wallis and Futuna, Samoa, Yemen, Yugoslavia, South Africa, Zamb ia, Zimbabwe,
  • 34.
    Revisão: Conceitos importantes •Como conectar o Java ao MySQL • Entender o CLASSPATH 34
  • 35.
    Revisão: conectando oJava ao MySQL • O driver JDBC é chamado MySQL Connector/J • Desenvolvido pela Oracle sob licença GPL • Driver Type IV (todo java, nativo) • Disponível para baixar em: • Software • dev.mysql.com/downloads/connector/j • Maven, Ivy • Many Linux and BSD distributions • Documentation • dev.mysql.com/doc/refman/5.5/en/connector-j.html 35
  • 36.
    Revisão: Entendendo oCLASPATH • O classpath é o local onde o Java procura por código compilado (biblioteca) • Há locais padrão para o classpath • WEB-INF/lib, WEB-INF/classes in webapps • $JRE_HOME/lib/ext • Quando estiver desenvolvendo ou implantando evite estes locais • $JRE_HOME/lib/ext • Application-server-wide • e.g. $CATALINA_HOME/lib • Se possível deixe este trabalho para sua IDE 36
  • 37.
    Crie um usuáriono MySQL. 37
  • 38.
    Criando usuário public User createUser(Connection c, String } catch (SQLException sqlEx) { login, String firstName, String lastName, String // handle it, it's not a concern outside credentials) { of persistence PreparedStatement p = null; } finally { try { try { p = c.prepareStatement("INSERT if (p != null) { p.close(); }; INTO user (login, first_name, last_name, passwd_hash) VALUES (?, ?, ?, ?)"); } catch (SQLException sqlEx) { p.setString(1, login); // can't do anything here, log? p.setString(2, firstName); } ResultSet rs = } p.getGeneratedKeys(); } rs.next(); long id = rs.getLong(1); PersistentUser user = new PersistentUser(); Estes tipos de user.setId(id); acesso é conhecido return user; como Raw JDBC… 38
  • 39.
    Arquitetando para osucesso com MySQL! Applications start small If they’re successful, they don’t stay that way
  • 40.
    Arquitetando para oSucesso Um Anti-Pattern Presentation Presentation Presentation Presentation Presentation Presentation Presentation Presentation Presentation BusinessLogic Presentation Presentation Presentation BusinessLogic BusinessLogic Presentation Presentation BusinessLogic BusinessLogic BusinessLogic BusinessLogic BusinessLogicBusinessLogic Persistence BusinessLogic Persistence Persistence BusinessLogic Persistence BusinessLogic BusinessLogic Persistence BusinessLogic BusinessLogic Persistence Persistence Persistence Persistence BusinessLogic Persistence Persistence Persistence Persistence Persistence Persistence Persistence Persistence Persistence 40
  • 41.
    Arquitetando para oSucesso Um Anti-Pattern Quero usar uma lógica daqui… Presentation Presentation Presentation Presentation Presentation Presentation Presentation Presentation Presentation …aplicar aqui… BusinessLogic Presentation Presentation Presentation BusinessLogic BusinessLogic Presentation Presentation BusinessLogic BusinessLogic BusinessLogic BusinessLogic BusinessLogicBusinessLogic Persistence …no contexto BusinessLogic Persistence Persistence BusinessLogic Persistence desta BusinessLogic BusinessLogic Persistence BusinessLogic BusinessLogic Persistence trasação. Persistence Persistence Persistence BusinessLogic Persistence Persistence Persistence Persistence Persistence Persistence Persistence Persistence Persistence 41
  • 42.
    Arquitetando para oSucesso Comece limpo Presentation Business Logic Persistence 42
  • 43.
    Arquitetando para oSucesso Comece limpo Presentation Transactions Business Logic Persistence 43
  • 44.
    Arquitetando para oSucesso Comece limpo Presentation Transactions Business Logic Caching Persistence 44
  • 45.
    Arquitetando para oSucesso Comece limpo Presentation } Test this Transactions Business Logic } Test this Caching Persistence } Test this 45
  • 46.
    Arquitetando para oSucesso Use ferramentas adequadas • Using Maven to manage the depedencies/build • Using SpringFramework • Dependency Injection • Templates/Boilerplate/Integration • Uma boa IDE: NetBeans, Eclipse 46
  • 47.
    Arquitetura em Camadas Exemplo Criar Usuário @Override public User createUser(String login, String firstName, String lastName, String credentials) { jdbcTemplate.update("INSERT INTO user (login, first_name, last_name, passwd_hash) VALUES (?, ?, ?, ?)", login, firstName, lastName, credentials); long id = jdbcTemplate.queryForLong("SELECT LAST_INSERT_ID()"); PersistentUser user = new PersistentUser(); user.setId(id); user.setLogin(login); user.setFirstName(firstName); user.setLastName(lastName); user.setCredentials(credentials); return user; } 47
  • 48.
    Como era noRaw JDBC public User createUser(Connection c, String } catch (SQLException sqlEx) { login, String firstName, String lastName, String // handle it, it's not a concern outside credentials) { of persistence PreparedStatement p = null; } finally { try { try { p = c.prepareStatement("INSERT if (p != null) { p.close(); }; INTO user (login, first_name, last_name, passwd_hash) VALUES (?, ?, ?, ?)"); } catch (SQLException sqlEx) { p.setString(1, login); // can't do anything here, log? p.setString(2, firstName); } ResultSet rs = } p.getGeneratedKeys(); } rs.next(); long id = rs.getLong(1); PersistentUser user = new PersistentUser(); Estes tipos de user.setId(id); acesso é conhecido return user; como Raw JDBC… 48
  • 49.
  • 50.
    Class not found •java.lang.ClassNotFoundException: com.mysql.jdbc.Driver • The driver is not in your CLASSPATH • Standalone applications with framework-managed CLASSPATH help with this, i.e WEB-INF/lib, or mvn or ant- managed CLASSPATH 66
  • 51.
    No Suitable Driver •SQLException: No suitable driver • Check your URL, compare to the documentation at http://dev.mysql.com/doc/refman/5.1/en/connector-j.html • Your URL should look something like jdbc:mysql://host:port/database[...] 67
  • 52.
    Out of Memory •java.lang.OutOfMemoryError when reading results • Your result set is too large, Connector/J buffers results by default • Most use cases don’t require large result sets • Those that do, process in chunks via SELECT ... LIMIT, or Statement.setFetchSize(Integer.MIN_VALUE) • Heap dump shows many statement, result set instances • Not closing resources on every code path • Frameworks help prevent this • Plumb try {} catch {} finally {} throughout your code (yuck!) 68
  • 53.
    Communications Exceptions • "Thelast packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server." • Your server was started with --skip-networking or --bind- address=127.0.0.1 and your client is remote to the server • “The last packet successfully received from the server was 25899 milliseconds ago.The last packet sent successfully to the server was 25899 milliseconds ago, which is longer than the server configured value of 'wait_timeout'” • Connections are sitting idle too long in your pool • Configure your pool to evict idle connections before wait_timeout would expire • Don’t let connections idle much more than the amount of time it takes to create a new one under worst-case 69
  • 54.
  • 55.
    MySQL Migration Tool Novo! • Wizard para migração de tabelas e dados: • MS-SQL Server 2000, 2005, 2008 e 2012. • SGBDs em geral via ODBC • Mapeamento personalizado (opcional) • Integrado ao Workbench open source e gratuito Download: mysql.com/downloads Documentação: dev.mysql.com/doc/workbench/en/wb-migration.html 71
  • 56.
  • 57.
  • 58.
    Referências • Use MySQLwith Java http://dev.mysql.com/usingmysql/java/ • Read Connector/J User Manual http://dev.mysql.com/doc/refman/5.5/en/connector-j.html • Download MySQL 5.5 http://www.mysql.com/downloads/mysql/ • Download Free MySQL White Papers http://dev.mysql.com/why-mysql/white-papers/ • View MySQL Training Courses http://mysql.com/training 74
  • 59.
    MySQL Treinamento eCertificação Treinamentos MySQL DBA MySQLDeveloper Certificações MySQL Boot Camp MySQL Boot Camp Accelerated Accelerated MySQL Performance MySQL Performance Tuning Boot Camp Tuning Boot Camp Accelerated Accelerated MySQL for Begginers MySQL for Begginers MySQL for Database MySQL and PHP Administrators Developing Dynamic Web Applicationg MySQL Performance Tuning MySQL for Developers MySQL High MySQL Advanced Availability Stored Procedures MySQL Cluster Opcional Necessário education.oracle.com 75
  • 60.
    Obrigado! @MySQLBR facebook.com/MySQLBR meetup.com/MySQL-BR 76