Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf ·...

39
Introdução à Tecnologia Java – 02/2012 Java – Aula 05 JDBC JDBC 12/09/2012 Celso Olivete Júnior [email protected] 1

Transcript of Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf ·...

Page 1: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Java – Aula 05

JDBCJDBC

12/09/2012

Celso Olivete Júnior

[email protected]

1

Page 2: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Exercício para aquecimento...utilize o pacote

Swing

Celso Olivete Júnior 2

C = (F-32)*5------------

9

Page 3: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

• Softwares utilizados:

•Java Development Kit (J2SDK)

•Ambiente de Desenvolvimento (JBuilder,

NetBeans, Gel, JCreator, etc)NetBeans, Gel, JCreator, etc)

•Sistema Gerenciador de Bancos de Dados

(MySQL, Interbase, Oracle, etc)

•Driver de Acesso (Específico do SGBD

utilizado) � MySql JDBC DriverCelso Olivete Júnior 3

Page 4: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

• Passos necessários:

•Instalação SGBD

•Uso do MySQL

•Criação da Base de Dados a partir de uma

modelagem e um script SQL ou diretamente no

“front” � PhpMyAdmin

•Definição de uma Fonte de dados

Celso Olivete Júnior 4

Page 5: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

• Biblioteca específica:

•java.sql

Celso Olivete Júnior 5

Page 6: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBCConexãoConexão JDBCJDBC::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Celso Olivete Júnior 6

StringString urlurl == "" jdbcjdbc::mysqlmysql ::////localhostlocalhost/bd_aula/bd_aula55??useruser==root&passwordroot&password="=";;

ClassClass..forNameforName(( ""comcom..mysqlmysql..jdbcjdbc..DriverDriver”” ));;

connectconnect == DriverManagerDriverManager..getConnectiongetConnection(( urlurl ));;

}}

catchcatch (( ClassNotFoundExceptionClassNotFoundException cnfexcnfex ))

{System{System..errerr..printlnprintln("Falha("Falha aoao lerler oo driverdriver JDBC/ODBC“+JDBC/ODBC“+ cnfexcnfex ));;}}

catchcatch (( SQLExceptionSQLException sqlexsqlex ))

{System{System..outout..printlnprintln("Impossível("Impossível conectar“+conectar“+ sqlexsqlex ));;}}

catchcatch (( ExceptionException exex ))

{System{System..outout..printlnprintln(“Outro(“Outro erro“+erro“+ exex ));;}}

Page 7: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBCBiblioteca SQL

ConexãoConexão JDBCJDBC::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Celso Olivete Júnior 7

StringString urlurl == "" jdbcjdbc::mysqlmysql ::////localhostlocalhost/bd_aula/bd_aula55??useruser==root&passwordroot&password="=";;

ClassClass..forNameforName(( ""comcom..mysqlmysql..jdbcjdbc..DriverDriver”” ));;

connectconnect == DriverManagerDriverManager..getConnectiongetConnection(( urlurl ));;

}}

catchcatch (( ClassNotFoundExceptionClassNotFoundException cnfexcnfex ))

{System{System..errerr..printlnprintln("Falha("Falha aoao lerler oo driverdriver JDBC/ODBC“+JDBC/ODBC“+ cnfexcnfex ));;}}

catchcatch (( SQLExceptionSQLException sqlexsqlex ))

{System{System..outout..printlnprintln("Impossível("Impossível conectar“+conectar“+ sqlexsqlex ));;}}

catchcatch (( ExceptionException exex ))

{System{System..outout..printlnprintln(“Outro(“Outro erro“+erro“+ exex ));;}}

Page 8: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBCBiblioteca SQLObjeto para a

ConexãoConexãoConexão JDBCJDBC::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Celso Olivete Júnior 8

StringString urlurl == "" jdbcjdbc::mysqlmysql ::////localhostlocalhost/bd_aula/bd_aula55??useruser==root&passwordroot&password="=";;

ClassClass..forNameforName(( ""comcom..mysqlmysql..jdbcjdbc..DriverDriver”” ));;

connectconnect == DriverManagerDriverManager..getConnectiongetConnection(( urlurl ));;

}}

catchcatch (( ClassNotFoundExceptionClassNotFoundException cnfexcnfex ))

{System{System..errerr..printlnprintln("Falha("Falha aoao lerler oo driverdriver JDBC/ODBC“+JDBC/ODBC“+ cnfexcnfex ));;}}

catchcatch (( SQLExceptionSQLException sqlexsqlex ))

{System{System..outout..printlnprintln("Impossível("Impossível conectar“+conectar“+ sqlexsqlex ));;}}

catchcatch (( ExceptionException exex ))

{System{System..outout..printlnprintln(“Outro(“Outro erro“+erro“+ exex ));;}}

Page 9: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBCBiblioteca SQLObjeto para a

Conexão

Caminho de conexão apontando para o nome da fonte JDBC. Neste caso o BD chama bd_aula5; o

user = root e password = vazio

ConexãoConexão JDBCJDBC::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Celso Olivete Júnior 9

StringString urlurl == "" jdbcjdbc::mysqlmysql ::////localhostlocalhost/bd_aula/bd_aula55??useruser==root&passwordroot&password="=";;

ClassClass..forNameforName(( ""comcom..mysqlmysql..jdbcjdbc..DriverDriver”” ));;

connectconnect == DriverManagerDriverManager..getConnectiongetConnection(( urlurl ));;

}}

catchcatch (( ClassNotFoundExceptionClassNotFoundException cnfexcnfex ))

{System{System..errerr..printlnprintln("Falha("Falha aoao lerler oo driverdriver JDBC/ODBC“+JDBC/ODBC“+ cnfexcnfex ));;}}

catchcatch (( SQLExceptionSQLException sqlexsqlex ))

{System{System..outout..printlnprintln("Impossível("Impossível conectar“+conectar“+ sqlexsqlex ));;}}

catchcatch (( ExceptionException exex ))

{System{System..outout..printlnprintln(“Outro(“Outro erro“+erro“+ exex ));;}}

Page 10: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBCBiblioteca SQLObjeto para a

ConexãoConexãoConexão JDBCJDBC::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Celso Olivete Júnior 10

Efetua a conexãoStringString urlurl == "" jdbcjdbc::mysqlmysql ::////localhostlocalhost/bd_aula/bd_aula55??useruser==root&passwordroot&password="=";;

ClassClass..forNameforName(( ""comcom..mysqlmysql..jdbcjdbc..DriverDriver”” ));;

connectconnect == DriverManagerDriverManager..getConnectiongetConnection(( urlurl ));;

}}

catchcatch (( ClassNotFoundExceptionClassNotFoundException cnfexcnfex ))

{System{System..errerr..printlnprintln("Falha("Falha aoao lerler oo driverdriver JDBC/ODBC“+JDBC/ODBC“+ cnfexcnfex ));;}}

catchcatch (( SQLExceptionSQLException sqlexsqlex ))

{System{System..outout..printlnprintln("Impossível("Impossível conectar“+conectar“+ sqlexsqlex ));;}}

catchcatch (( ExceptionException exex ))

{System{System..outout..printlnprintln(“Outro(“Outro erro“+erro“+ exex ));;}}

Page 11: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBCBiblioteca SQLObjeto para a

ConexãoConexãoConexão JDBCJDBC::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

StringString urlurl == "" jdbcjdbc ::mysqlmysql :: ////localhostlocalhost /bd_aula/bd_aula 55??useruser ==root&passwordroot&password ="=" ;;

Celso Olivete Júnior 11

Três tipos possíveis de erro

StringString urlurl == "" jdbcjdbc ::mysqlmysql :: ////localhostlocalhost /bd_aula/bd_aula 55??useruser ==root&passwordroot&password ="=" ;;

ClassClass..forNameforName(( ""comcom..mysqlmysql..jdbcjdbc..DriverDriver”” ));;

connectconnect == DriverManagerDriverManager..getConnectiongetConnection(( urlurl ));;

}}

catchcatch (( ClassNotFoundExceptionClassNotFoundException cnfexcnfex ))

{System{System..errerr..printlnprintln("Falha("Falha aoao lerler oo driverdriver JDBC/ODBC“+JDBC/ODBC“+ cnfexcnfex ));;}}

catchcatch (( SQLExceptionSQLException sqlexsqlex ))

{System{System..outout..printlnprintln("Impossível("Impossível conectar“+conectar“+ sqlexsqlex ));;}}

catchcatch (( ExceptionException exex ))

{System{System..outout..printlnprintln(“Outro(“Outro erro“+erro“+ exex ));;}}

Page 12: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

InsertInsert // SelectSelect // UpdateUpdate // DeleteDelete::

importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

Cria o objeto para executar um comando

SQL

Celso Olivete Júnior 12

……

trytry {{ StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == "UPDATE"UPDATE pessoapessoa SETSET nomenome == ‘‘JoaquimJoaquim’’ “+“+

““ WHEREWHERE idid == 11””;;

intint resultresult == statementstatement..executeUpdateexecuteUpdate(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Page 13: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

InsertInsert // SelectSelect // UpdateUpdate // DeleteDelete::

importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

Cria o objeto para executar um comando

SQL

Monta o SQL

Celso Olivete Júnior 13

……

trytry {{ StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == "UPDATE"UPDATE pessoapessoa SETSET nomenome == ‘‘JoaquimJoaquim’’ “+“+

““ WHEREWHERE idid == 11””;;

intint resultresult == statementstatement..executeUpdateexecuteUpdate(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Page 14: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

InsertInsert // SelectSelect // UpdateUpdate // DeleteDelete::

importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

Cria o objeto para executar um comando

SQL

Monta o SQL

Celso Olivete Júnior 14

……

trytry {{ StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == "UPDATE"UPDATE pessoapessoa SETSET nomenome == ‘‘JoaquimJoaquim’’ “+“+

““ WHEREWHERE idid == 11””;;

intint resultresult == statementstatement..executeUpdateexecuteUpdate(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Executa o SQL retornando o número de

registros afetados

Page 15: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

InsertInsert // SelectSelect // UpdateUpdate // DeleteDelete::

importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

Cria o objeto para executar um comando

SQL

Monta o SQL

Celso Olivete Júnior 15

……

trytry {{ StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == "UPDATE"UPDATE pessoapessoa SETSET nomenome == ‘‘JoaquimJoaquim’’ “+“+

““ WHEREWHERE idid == 11””;;

intint resultresult == statementstatement..executeUpdateexecuteUpdate(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Executa o SQL retornando o número de

registros afetados

Finaliza o objeto que executou o SQL

Page 16: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

InsertInsert // SelectSelect // UpdateUpdate // DeleteDelete::

importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

Cria o objeto para executar um comando

SQL

Monta o SQL

Celso Olivete Júnior 16

……

trytry {{ StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == "UPDATE"UPDATE pessoapessoa SETSET nomenome == ‘‘JoaquimJoaquim’’ “+“+

““ WHEREWHERE idid == 11””;;

intint resultresult == statementstatement..executeUpdateexecuteUpdate(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Erro de SQL

Executa o SQL retornando o número de

registros afetados

Finaliza o objeto que executou o SQL

Page 17: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

SelectSelect::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Celso Olivete Júnior 17

trytry {{

StatementStatement statementstatement == connectconnect..createStatementcreateStatement()() ;;

StringString queryquery == “SELECT“SELECT ** FROMFROM addresses”addresses”;;

ResultSetResultSet rsrs == statementstatement..executeQueryexecuteQuery(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Page 18: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

SelectSelect::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Cria o objeto para executar um comando

SQL

Celso Olivete Júnior 18

trytry {{

StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == “SELECT“SELECT ** FROMFROM addresses”addresses”;;

ResultSetResultSet rsrs == statementstatement..executeQueryexecuteQuery(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Page 19: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

SelectSelect::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Cria o objeto para executar um comando

SQL

Monta

Celso Olivete Júnior 19

trytry {{

StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == “SELECT“SELECT ** FROMFROM addresses”addresses”;;

ResultSetResultSet rsrs == statementstatement..executeQueryexecuteQuery(( queryquery ));;

statementstatement..close()close();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Monta SQL

Page 20: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

SelectSelect::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Cria o objeto para executar um comando

SQL

Monta

Celso Olivete Júnior 20

trytry {{

StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == “SELECT“SELECT ** FROMFROM addresses”addresses”;;

ResultSetResultSet rsrs == statementstatement..executeQueryexecuteQuery(( queryquery ));;

statementstatement..closeclose()();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Monta SQL

Executa o SQL retornando um

conjunto de dados

Page 21: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

SelectSelect::importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

Cria o objeto para executar um comando

SQL

Monta

Celso Olivete Júnior 21

trytry {{

StatementStatement statementstatement == connectconnect..createStatementcreateStatement()();;

StringString queryquery == “SELECT“SELECT ** FROMFROM addresses”addresses”;;

ResultSetResultSet rsrs == statementstatement..executeQueryexecuteQuery(( queryquery ));;

statementstatement..closeclose()();;

}}

catchcatch (( SQLExceptionSQLException sqlexsqlex )) {{......}}

Monta SQL

Executa o SQL retornando um

conjunto de dados

Finaliza o objeto que executou o SQL

Page 22: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

• Utilizando os dados retornados:

•Posicionamento de registros:

ResultSet rs;

...

rs.first(); rs.last(); rs.next(); rs.previous();

•Escolhendo um campo:

Int Codigo = rs. getInt( “ID” );

String Nome = rs. getString( “Nome” );

Date Nascimento = rs. getDate( “DtNasc” );

Exemplo:String info;

while(rs.next())

{ info=rs.getString(“sobrenome");

System.out.println(info);

}

Celso Olivete Júnior 22

Page 23: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

InsertInsert:: �� ExemploExemplo 11 ((setandosetando valoresvalores forafora dodo sqlsql))importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

PreparedStatementPreparedStatement insere_dadosinsere_dados;;

insere_dadosinsere_dados == connectconnect..prepareStatementprepareStatement("("insertinsert intointo tb_dadostb_dados valuesvalues (?,?,?)(?,?,?) ")");;

insere_dadosinsere_dados..setStringsetString((11,, nullnull));;

Celso Olivete Júnior 23

insere_dadosinsere_dados..setStringsetString((22,, ""xxxxxxxxxx")");;

insere_dadosinsere_dados..setStringsetString((33,, ""yyyyyyyy")");;

insere_dadosinsere_dados.. executeUpdateexecuteUpdate()();;

SystemSystem..outout..printprint("Dados("Dados inseridosinseridos......")");;

}}

catchcatch ((SQLExceptionSQLException sqlexsqlex ))

{System{System..errerr..printlnprintln("Erro("Erro nono SQL!"+SQL!"+sqlexsqlex));; }}

Essa mesma forma

pode ser feita para as

instruções SELECT (no

caso de uma busca),

UPDATE e DELETE

Page 24: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

InsertInsert:: �� ExemploExemplo 22 ((setandosetando valoresvalores nono sqlsql))importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

StatementStatement insere_dadosinsere_dados == connectconnect..createStatementcreateStatement ()();;

StringString queryquery == "INSERT"INSERT INTOINTO tb_dadostb_dados (item,(item,descricaodescricao)) VALUESVALUES ('('xxxxxxxxxx','','yyyyyyyyyyyy')') "";;

insere_dadosinsere_dados.. executeexecute ((queryquery));;

Celso Olivete Júnior 24

SystemSystem..outout..printprint("Inserido("Inserido......")");;

}}

catchcatch ((SQLExceptionSQLException sqlexsqlex ))

{System{System..errerr..printlnprintln("Erro("Erro nono SQL!"+SQL!"+sqlexsqlex));; }}

Page 25: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

DeleteDelete::

importimport javajava..sqlsql..**;;

......

privateprivate ConnectionConnection connectconnect;;

……

trytry {{

StringString queryquery == "DELETE"DELETE FROMFROM tb_dadostb_dados WHEREWHERE tb_codtb_cod == ??"";;

PreparedStatementPreparedStatement statementstatement == connectconnect ..prepareStatementprepareStatement ((queryquery ));;

Celso Olivete Júnior 25

PreparedStatementPreparedStatement statementstatement == connectconnect ..prepareStatementprepareStatement ((queryquery ));;

statementstatement..setIntsetInt((11,, 4444));;

statementstatement..executeUpdateexecuteUpdate()();; ;;

SystemSystem..outout..printprint("Dados("Dados excluídosexcluídos......")");;

}}

catchcatch ((SQLExceptionSQLException sqlexsqlex ))

{System{System..errerr..printlnprintln("Erro("Erro nono SQL!"+SQL!"+sqlexsqlex));; }}

Page 26: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Exercício

• Desenvolver um BD e uma interface

para sua respectiva manipulação

(insert, select, update e delete)

Celso Olivete Júnior 26

Page 27: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012Acesso a Bancos de Dados via JDBC

• Utilizando os dados retornados:

• Recuperando os campos de uma tabela

ResultSet rs;

...

ResultSetMetaData rsm = rs.getMetaData();

for( int i=1;i<=rsm.getColumnCount(); i++)

System.out.println(rsm.getColumnName(i));

Recupera os campos de

uma tabela ou query

Número de campos

• getColumnTypeName – retorna o tipo do dado;

� java.sql.Types

for (int i=1; i<=rsmd.getColumnCount(); i++)

{

info=rsmd.getColumnTypeName(i);

info2=rsmd.getColumnName(i);

System.out.println(info2 + " --> " + info + "\n");

}

Celso Olivete Júnior 27

Os campos

Retorna o tipo

Page 28: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

cod nome cpf

1 Jose Anibal 312121212

2 Cleide Alvares 121212323

3 Celina Dilon 121323423

Proprietário

cod codp modelo valor

1 1 Fusca 1600 1320,00

2 2 Brasilia 1200,00

3 1 Gordine II 4500,00

Veículo

Celso Olivete Júnior 28

SQL:

SELECT modelo FROM Veiculo WHERE valor > 2000;

SELECT * FROM Proprietario WHERE name LIKE ‘Jose%’;

SELECT v.* FROM Proprietario p, veiculo v WHERE p.cod=v.codp;

INSERT INTO Veiculo VALUES(5,3,’DKW’,3000.50);

UPDATE veiculo SET valor=valor*1.1 WHERE modelo =“Fusca 1600";

Page 29: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

//insere novo registro

rs.moveToInsertRow();

// move para a linha a ser inserida (depois da últi ma tupla)

rs.updateString(2, "Heitor Villa Lobos");

Inserindo um novo Registro (Tabela Pessoa)

Celso Olivete Júnior 29

// atualiza a coluna nome

rs.updateString("endereco", "Rua 7 de Setembro, 200 ");

rs.updateString("cidade","Presidente Prudente");

rs.updateString("estado","SP");

//rs.updateInt(3,1);

//rs.updateBoolean(3, true);

rs.insertRow();

rs.moveToCurrentRow();

Page 30: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

//inserção usando um statement

Statement statement = connect.createStatement();

String query = "INSERT INTO pessoa

(nome,endereco,cidade,estado)

Inserindo um novo Registro (Tabela Pessoa)

Celso Olivete Júnior 30

(nome,endereco,cidade,estado)

VALUES

('José de Alencar','Av. Copacabana, 222', 'Rio

de Janeiro', 'RJ')";

boolean res = statement.execute(query);

Page 31: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

//alteração usando um statement

Statement statement = connect.createStatement();

String query = "UPDATE pessoa SET nome = 'Clara Nun es'

WHERE id = 5";

Alterando um Registro (Tabela Pessoa)

Celso Olivete Júnior 31

WHERE id = 5";

int res = statement.executeUpdate(query);

Page 32: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC

• Transações

• O método setAutoCommit() do objeto Connection que especifica se

•cada instrução SQL executada deve ser confirmada (committed)

individualmente setAutoCommit(true)

•ou se várias instruções devem ser agrupadas como uma transação

setAutoCommit(false)setAutoCommit(false)

• Se for usado setAutoCommit(false) a execução do bloco deve ser

finalizada como o método commit() do objeto Connection

• Ou então, pelo método rollback() para voltar ao estado anterior.

• O método getAutoCommit() retorna o estado do AutoCommit (true ou

false)

Celso Olivete Júnior 32

Page 33: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC: exemplo com JTableimport java.sql.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.util.*; //por causa do Vector

public class TesteTable extends JFrame{private Connection connect;

private JTable table;public TesteTable() //construtor{

try {

Celso Olivete Júnior 33

try {String url = "jdbc:mysql://localhost/bd_aula5?user= root&password=";Class.forName( "com.mysql.jdbc.Driver” );connect = DriverManager.getConnection( url );

}catch ( ClassNotFoundException cnfex ){System.err.println("Falha ao ler o driver JDBC/ODBC ");}catch ( SQLException sqlex ){System.out.println("Impossível conectar");}catch ( Exception ex ){System.out.println("Outro erro");}getTable(); show();

}

Page 34: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC: exemplo com JTable

private void getTable(){

Statement st;

ResultSet rs;

try{

String query = "SELECT * FROM pessoa";

st = connect.createStatement();

Celso Olivete Júnior 34

st = connect.createStatement();

rs = st.executeQuery(query);

mostraResultado(rs);

st.close();

}catch(SQLException sqlex){

sqlex.printStackTrace();

}

}

Page 35: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC: exemplo com JTableprivate void mostraResultado(ResultSet rs) throws S QLException {

boolean verificaDados = rs.next();if (!verificaDados){

JOptionPane.showMessageDialog(null, "Nenhum registr o!");setTitle("Nenhum registro!!!");return;

}setTitle("Pessoas cadastradas!!!");Vector cabecalho = new Vector();Vector tuplas = new Vector();try {

Celso Olivete Júnior 35

try {ResultSetMetaData rsmd = rs.getMetaData();for (int i = 1; i<=rsmd.getColumnCount(); i++)

cabecalho.addElement(rsmd.getColumnName(i));do{

tuplas.addElement(getTupla(rs,rsmd)); }while(rs.next()); table = new JTable(tuplas, cabecalho);JScrollPane scroll = new JScrollPane(table);getContentPane().add(scroll, BorderLayout.CENTER);validate(); //Atualiza desenho da tela

}catch(SQLException sqlex){sqlex.printStackTrace(); }

}

Page 36: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC: exemplo com JTable

private Vector getTupla(ResultSet rs, ResultSetMeta Data rsmd) throws SQLException{

Vector tupla = new Vector();

for (int i=1; i<=rsmd.getColumnCount(); i++)

{

switch(rsmd.getColumnType(i)){

case Types.VARCHAR:

tupla.addElement(rs.getString(i));

break;

case Types.INTEGER:

tupla.addElement(new Long(rs.getLong(i)));

Celso Olivete Júnior 36

tupla.addElement(new Long(rs.getLong(i)));

break;

case Types.SMALLINT:

tupla.addElement(new Long(rs.getLong(i)));

break;

case Types.CHAR:

tupla.addElement(rs.getString(i));

break;

default:

System.out.println("O Tipo era: " + rsmd.getColumnT ypeName(i));

}

}

return tupla;

}

Page 37: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Acesso a Bancos de Dados via JDBC: exemplo com JTablepublic void shutDown() {

try{connect.close();

}catch(SQLException sqlex){System.err.println("Não foi possível desconetar!!!" );sqlex.printStackTrace();}

}

Celso Olivete Júnior 37

public static void main(String[] args){

final TesteTable app = new TesteTable();

app.addWindowListener( new WindowAdapter() {public void windowClosing(WindowEvent e){

app.shutDown();System.exit(0);

}});

}

Page 38: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Exercício 1

• Implementar um ambiente para consulta usando JTable,para qualquer consulta SQL efetuada pelo usuário;

•O JTable será recriado de acordo com o resultado daconsulta;

•Dicas:•Para cada consulta o JTable deve ser removido:•Para cada consulta o JTable deve ser removido:

Container c = getContentPane();

c.remove(1);

c.add(scroll, BorderLayout.CENTER);

c.validate();

Celso Olivete Júnior 38

JTable

Button (Submit)

TextArea (Query)

Page 39: Java –Aula 05 - Unespdocs.fct.unesp.br/docentes/dmec/olivete/java/arquivos/Aula05.pdf · Introdução à Tecnologia Java –02/2012 Java –Aula 05 JDBC 12/09/2012 Celso OliveteJúnior

Introdução à Tecnologia Java – 02/2012

Exercício 1tEntrada = new JTextArea("SELECT * FROM pessoa", 4, 30);

bConsulta = new JButton("Consultar");

bConsulta.addActionListener( new ActionListener() {

public void actionPerformed (ActionEvent e){

if (e.getSource() == bConsulta)

getTable();

} });

JPanel topPanel = new JPanel();

topPanel.setLayout( new BorderLayout());

Celso Olivete Júnior 39

JTable

Button (Submit)

TextArea (Query)

topPanel.setLayout( new BorderLayout());

topPanel.add(new JScrollPane(tEntrada), BorderLayout.CENTER);

topPanel.add(bConsulta,BorderLayout.SOUTH);

table = new JTable(4,4);

Container c = getContentPane();

c.setLayout(new Borderlayout());

c.add(topPanel,BorderLayout.NORTH);

c.add(table,BorderLayout.CENTER);