<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java Simples &#187; netbeans</title>
	<atom:link href="http://www.javasimples.com.br/tag/netbeans/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javasimples.com.br</link>
	<description>Porque Java não precisa ser difícil...</description>
	<lastBuildDate>Mon, 07 May 2012 00:36:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Java Magazine 90 &#8211; Hibernate Annotations</title>
		<link>http://www.javasimples.com.br/hibernate-2/java-magazine-90-hibernate-annotations</link>
		<comments>http://www.javasimples.com.br/hibernate-2/java-magazine-90-hibernate-annotations#comments</comments>
		<pubDate>Thu, 21 Apr 2011 15:09:43 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Outras]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[banco]]></category>
		<category><![CDATA[dados]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java magazine]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=369</guid>
		<description><![CDATA[É com grande prazer que venho informar que escrevi um artigo sobre Hibernate Annotations para a revista Java Magazine e o artigo foi publicado na edição número 90. Segue um pequeno resumo do artigo: Hibernate Annotations &#8211; Mapeamento Objeto Relacional através de Anotações Desde que surgiu o Hibernate para ser uma ponte entre a orientação [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.javasimples.com.br/wp-content/uploads/2011/04/java-magazine1.jpg"><img class="aligncenter size-full wp-image-370" title="java-magazine[1]" src="http://www.javasimples.com.br/wp-content/uploads/2011/04/java-magazine1.jpg" alt="" width="267" height="125" /></a></p>
<p>É com grande prazer que venho informar que escrevi um artigo sobre Hibernate Annotations para a revista Java Magazine e o artigo foi publicado na edição número 90.</p>
<p>Segue um pequeno resumo do artigo:</p>
<blockquote><p><strong>Hibernate Annotations &#8211; Mapeamento Objeto Relacional através de Anotações</strong></p>
<p>Desde que surgiu o Hibernate para ser uma ponte entre a orientação a objetos e a persistência de dados em bancos de dados relacionais, tudo o que o desenvolvedor precisa fazer é descrever suas classes com alguns metadados para poder se focar no desenvolvimento da aplicação (regras de negócio). Assim, sem se preocupar muito com a persistência de seus objetos em bancos de dados o desenvolvedor consegue aumentar sua produtividade.</p>
<p>Durante um bom tempo os metadados foram descritos através de XML (e são até hoje). Para cada classe que seria persistida no banco de dados era criado um novo XML explicando como o Hibernate deveria realizar o mapeamento entre atributos da classe e colunas da tabela.</p>
<p>Atualmente este não é mais o único modo de descrever os metadados, existe também o Hibernate Annotations, projeto que provê a descrição dos metadados através de anotações. Deste modo, ao invés de um arquivo XML para cada classe, os metadados podem ser anotados na própria classe e em seus atributos, facilitando ainda mais o processo de mapeamento.</p>
<p>Nesse artigo serão apresentados os conceitos necessários para entender como utilizar o framework Hibernate para persistir as classes Java em bancos de dados relacionais apenas com a descrição de metadados providos por anotações, utilizando, para isso, a IDE NetBeans 6.9.1 e o banco de dados MySQL.</p></blockquote>
<p>Caso o assunto seja de seu interesse pode dar um pulo no <a title="Java Magazine 90" href="http://www.devmedia.com.br/post-20429-Revista-Java-Magazine-90.html" target="_blank">site da revista</a> ou então dar uma conferida nas bancas..</p>
<p>[]s,<br />
Saab.</p>
<p>PS: Isso não foi marketing! Estou feliz pois meu primeiro artigo para a revista foi publicado. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/hibernate-2/java-magazine-90-hibernate-annotations/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Spring Framework Parte 3 -&gt; Java Database Connectivity (JDBC)</title>
		<link>http://www.javasimples.com.br/spring-2/spring-framework-parte-3-java-database-connectivity-jdbc</link>
		<comments>http://www.javasimples.com.br/spring-2/spring-framework-parte-3-java-database-connectivity-jdbc#comments</comments>
		<pubDate>Thu, 02 Sep 2010 12:50:56 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[banco]]></category>
		<category><![CDATA[connectivity]]></category>
		<category><![CDATA[dados]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=213</guid>
		<description><![CDATA[Bem vindo leitor a mais um post da série Spring Framework. Caso você ainda não leu os posts anteriores, por favor dê um pulinho bem rápido neles: Spring Framework Parte 1 -> Dependency Injection Spring Framework Parte 2 -> Aspect Oriented Programming Vamos ao nosso próximo assunto então: JDBC e como o Spring facilita esse [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Bem vindo leitor a mais um post da série <strong>Spring Framework</strong>.</p>
<p>Caso você ainda não leu os posts anteriores, por favor dê um pulinho bem rápido neles:</p>
<ul>
<li><a href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/" target="_blank">Spring Framework Parte 1 -> Dependency Injection</a></li>
<li><a href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/" target="_blank">Spring Framework Parte 2 -> Aspect Oriented Programming</a></li>
</ul>
<p><br/>Vamos ao nosso próximo assunto então: JDBC e como o Spring facilita esse cara pra gente!</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_hitting_database1.png"><img src="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_hitting_database1.png" alt="" title="spring_framework_3_jdbc_hitting_database" width="402" height="197" class="aligncenter size-full wp-image-215" /></a></p>
<p>Tirando essa imagem do livro <strong>Spring in Action 2 (Manning, 2008)</strong> nós já conseguimos ver bem por cima como que o Spring pretende acessar de maneira padronizada a base de dados (Hitting the database) através de um objeto de acesso aos dados (DAO), um template (provido pelo próprio Spring) e caso nós quiséssemos, o Spring também oferece suporte padrão para alguns frameworks de persistência (será um dos próximos artigos desta série).</p>
<p>Tudo muito legal, muito bonito! Vamos tentar seguir este modelinho porque ele é bem bonitinho e vai nos ajudar um pouco. Apenas avisando que o jeito que descreverei neste tutorial não é o único jeito de acessar os dados através do seu driver JDBC, porém é um jeito que eu achei bem interessante e que vale a pena todos sabermos um pouquinho&#8230; =]<br />
<!--:--><span id="more-213"></span><!--:pt--></p>
<p>Existem apenas 2 conceitos básicos que o Spring nos sugere para o acesso rápido e fácil aos dados através de drivers JDBC: DataSource (DAO fornecido pelo Spring) e JdbcTemplate (template para acesso a dados através de um driver JDBC fornecido pelo Spring):</p>
<p><strong>DataSource</strong> é uma classe provida pelo nosso querido Spring Framework e que se preocupa com toda a conexão e conversação com o driver JDBC que iremos utilizar (neste exemplo iremos utilizar o driver JDBC para o banco de dados MySQL). Em palavras um pouco mais técnicas, esta classe irá se resonsabilizar por nos entregar um objeto <strong>java.sql.Connection</strong>, <strong>java.sql.Statement</strong>, entre esses objetos que utilizamos quando o assunto é conexão de dados JDBC.</p>
<p><strong>JdbcTemplate</strong> é uma outra classe muito útil provida pelo nosso <del datetime="2010-08-26T22:29:28+00:00">adorado</del> Spring! Este template provê métodos padronizados para acessarmos os dados (selecioná-los e manipulá-los), ou seja, fazer tudo o que podemos fazer com eles de um jeito bem fácil de acessar (como você irá descobrir logo a frente).</p>
<p>Muito bem, com esses dois conceitos já pintados na sua cabeça, por favor responda corretamente a próxima pergunta: &#8220;Já que estas classes são providas pelo nosso amigo Spring, quem instancia elas?&#8221;. Exato!! O próprio Spring cria os beans para estas classes, tudo o que temos que fazer é declarar estes beans no arquivo de configuração do Spring. Vamos a ele então:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;driverClassName&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;com.mysql.jdbc.Driver&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;jdbc:mysql://localhost/spring_jdbc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;root&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;123&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.core.JdbcTemplate&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Tão simples quanto encher um copo com água! Eu sinto até orgulho de mostrar como é fácil conectar com uma fonte de dados JDBC através do Spring!</p>
<p>O nosso primeiro bean é o <strong>dataSource</strong>. Como eu já disse ali em cima, esse é o cara responsável por conversar com o driver JDBC. Então nada mais justo que a gente ensinar ele a se comunicar com o driver passando os parâmetros corretos não é&#8230; Os parâmetros (injetados através da DI) passados para o dataSource foram: dataClassName (qual driver JDBC será usado), url (caminho do JDBC para se conectar até o banco de dados desejado), username (login do banco de dados) e password (senha do banco de dados).</p>
<p>No caso desse nosso exemplo, o driver JDBC é do MySQL, nunca esqueça que o driver deve estar no classpath em!!! Segue uma foto te ensinando como adicionar o driver JDBC do MySQL no NetBeans:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_driver_mysql1.png"><img src="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_driver_mysql1.png" alt="" title="spring_framework_3_jdbc_driver_mysql" width="364" height="408" class="aligncenter size-full wp-image-224" /></a></p>
<p>E o segundo bean do arquivo de configuração é o <strong>jdbcTemplate</strong> que é o template provido pelo Spring para facilitar a manipulação dos dados. A unica dependência que este bean tem é o próprio dataSource, ou seja, ele precisa de uma referência para um dataSource para saber em qual banco ele vai executar os comandos que quisermos. Sendo assim, de um jeito muito fácil (injeção de dependência), nós passamos uma referência do nosso <strong>dataSource</strong> já criado para ele. ^^</p>
<p>Só fazendo uma pequena pausa no Spring agora, vamos falar um pouquinho do banco de dados: criei uma tabela de Pessoas para fazermos nossos teste aqui. Dê uma olhada no script de criação:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span>  <span style="color: #ff0000;">`Pessoas`</span> <span style="color: #66cc66;">&#40;</span>
    <span style="color: #ff0000;">`pes_cod`</span> <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
    <span style="color: #ff0000;">`pes_nome`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">100</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">COLLATE</span> utf8_unicode_ci <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
    <span style="color: #ff0000;">`pes_idade`</span> <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
    <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>  <span style="color: #ff0000;">`pes_cod`</span> <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span> ENGINE <span style="color: #66cc66;">=</span> INNODB <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">COLLATE</span> utf8_unicode_ci;</pre></div></div>

<p>Muuuito bem! A esta altura nós já temos os arquivos base para a conexão com o banco de dados E o banco de dados! Vamos continuar a codificar mais algumas classes e veremos o quão fácil o Spring tornou o acesso aos dados através do JDBC para nós.</p>
<p>Já que temos a tabela pronta no banco de dados, precisamos desenvolver uma classe Java que irá representar cada registro dessa tabela (para manipulação em memória né&#8230;):</p>
<p>Pessoa.java</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Pessoa <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> nome<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> idade<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Não Encontrado&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">idade</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCod<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setCod<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getIdade<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> idade<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setIdade<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> idade<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">idade</span> <span style="color: #339933;">=</span> idade<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNome<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setNome<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> nome<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Codigo: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span><span style="color: #009900;">&#41;</span>
                <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; | Nome: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span>
                <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; | Idade: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">idade</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto, com a classe Pessoa agora fica bem mais fácil nós termos uma &#8220;Pessoa&#8221; em memória! Vamos daqui pra frente tentar unir a classe Pessoa que acabamos de escrever com o banco de dados, ou seja, inserir um objeto da classe Pessoa no banco de dados, recuperar um objeto Pessoa do banco, e por ai vai&#8230; <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Caso você acompanha este blog regularmente, já deve ter percebido que eu virei fã de utilizar as interfaces no desenvolvimento (os motivos são muitos! então apenas acredite: compensa!). Já que eu sou um cara que gosta de seguir padrões e tudo mais, vamos codificar uma interface que será muito útil para o nosso acesso ao banco de dados:</p>
<p>IBanco.java</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> IBanco <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> InserirPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> AtualizarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ApagarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Pessoa SelecionarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Esta interface obriga a classe que implementá-la a dar suporte para as operações CRUD referêntes aos objetos Pessoa juntamente com a tabela do banco de dados Pessoa (ficou meio confusa essa frase? hehehe).</p>
<p>Como o código sempre resolve tudo, vamos a ele que você irá entender do que eu estou falando:</p>
<p>BancoDados.java</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BancoDados <span style="color: #000000; font-weight: bold;">implements</span> IBanco <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> JdbcTemplate jdbcTemplate<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> BancoDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setJdbcTemplate<span style="color: #009900;">&#40;</span>JdbcTemplate jdbcTemplate<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">jdbcTemplate</span> <span style="color: #339933;">=</span> jdbcTemplate<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> InserirPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;INSERT INTO Pessoas(pes_cod,pes_nome,pes_idade) VALUES(?,?,?)&quot;</span><span style="color: #339933;">;</span>
        jdbcTemplate.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getIdade</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> AtualizarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;UPDATE Pessoas SET pes_nome = ?, pes_idade= ? WHERE pes_cod = ?&quot;</span><span style="color: #339933;">;</span>
        jdbcTemplate.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getIdade</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ApagarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;DELETE FROM Pessoas WHERE pes_cod = ?&quot;</span><span style="color: #339933;">;</span>
        jdbcTemplate.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Pessoa SelecionarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT * FROM Pessoas WHERE pes_cod = ?&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #003399;">List</span> resultados <span style="color: #339933;">=</span> jdbcTemplate.<span style="color: #006633;">query</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span>,
                <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RowMapper</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> mapRow<span style="color: #009900;">&#40;</span><span style="color: #003399;">ResultSet</span> rs, <span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">SQLException</span> <span style="color: #009900;">&#123;</span>
                        Pessoa p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        p.<span style="color: #006633;">setCod</span><span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pes_cod&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        p.<span style="color: #006633;">setNome</span><span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pes_nome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        p.<span style="color: #006633;">setIdade</span><span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pes_idade&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #000000; font-weight: bold;">return</span> p<span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        Pessoa pes <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultados.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            pes <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Pessoa<span style="color: #009900;">&#41;</span> resultados.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            pes.<span style="color: #006633;">setCod</span><span style="color: #009900;">&#40;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> pes<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Muito bem, vamos com calma&#8230;</p>
<p>A primeira coisa que devemos notar é que temos uma variável de instância chamada <strong>jdbcTemplate</strong>. Como eu imagino que você leitor é um cara que associa tudo muito rápido e já viu que um pouco mais pra baixo dessa variável tem o setter dela, eu imagino que você já entendeu que essa variável vai ser injetada através do container do Spring né&#8230; =]</p>
<p>Como nós já pedimos pro Spring criar um bean do tipo JdbcTemplate no arquivo de configuração, daqui a pouco nós voltaremos nele e pediremos pra ele enviar uma referência do JdbcTemplate aqui pra essa nossa classe poder usar. Tudo muito prático! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Depois disso o que nós podemos entender é que a classe reescreveu os métodos que a interface obriga e os implementou de fato! Vamos entender eles rapidinho&#8230;</p>
<p>Para as operações de inserção, alteração e exclusão os métodos são absolutamente iguais: primeiro foi definido o SQL referente a operação e depois foi chamado o método <strong>update</strong> da nossa classe super amigável: jdbcTemplate.</p>
<p>Existem dois detalhes para chamar a atenção na execução destas operações:</p>
<p>1 &#8211; O SQL que foi montado não possui os valores finais. Ao invés deles estão presentes pontos de interrogação ( ? ) representando parâmetros.</p>
<p>2 &#8211; Os parâmetros informados no SQL são enviados como o segundo parâmetro do método update do jdbcTemplate. Para a padronização na chamada do método é necessário que todos os parâmetros definidos no SQL sejam passados dentro de um vetor de Object (mesmo que seja só um parâmetro, ele também deve estar dentro do vetor). Outra coisa que vale ser lembrada é que o primeiro item do vetor irá ser incluído no lugar do primeiro parâmetro do SQL (primeiro ponto de interrogação) então tome cuidado para passar os parâmetros na ordem correta para o vetor de Object.</p>
<p>Só mais um comentário para a operação de seleção: também foi utilizado um SQL com parâmetro e um vetor de Object referenciando os parâmetros porém o método do <strong>jdbcTemplate</strong> utilizado não foi o <strong>update</strong>, e sim o <strong>query</strong>!</p>
<p>O funcionamento deste método é bem interessante: ao invés de apenas 2 parâmetros (como no método <strong>update</strong>), depois do vetor de Object é passado um objeto <strong>org.springframework.jdbc.core.RowMapper</strong> que é responsável por mapear cada registro retornado por um ResultSet interno ao <strong>jdbcTemplate</strong> em um objeto correspondente ao registro e após o mapeamento o objeto customizado é adicionado a um <strong>java.util.List</strong> que é o retorno final do método <strong>query</strong>.</p>
<p>Exemplo do nosso caso: caso sejam retornadas 3 pessoas pelo SQL utilizado, o método <strong>mapRow</strong> do objeto <strong>RowMapper</strong> será invocado 3 vezes (uma para cada registro). Cada vez que ele for invocado será configurado um novo objeto Pessoa com os dados de cada registro retornado do banco de dados e cada vez que o método retornar um novo objeto Pessoa ele será guardado na lista que será retornada pelo método <strong>query</strong>.</p>
<p>Logo depois deste método eu apenas retorno o primeiro objeto que está na lista ou então retorno um objeto com o mesmo código da busca caso não foi encontrado nenhum registro.</p>
<p>Sempre muito simples esses códigos&#8230; adoro isso&#8230; ehheheh</p>
<p>Vamos adicionar um bean ao arquivo de configuração do Spring para o container também instanciar a nossa classe responsável pelo banco de dados e é claro, vamos também já injetar o JdbcTemplate no nosso novo bean:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;driverClassName&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;com.mysql.jdbc.Driver&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;jdbc:mysql://localhost/spring_jdbc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;root&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;123&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.core.JdbcTemplate&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;banco_dados&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;spring_jdbc.BancoDados&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>E isso é tudo!!<br />
Nossas classes base para o acesso e manipulação da entidade Pessoa no banco de dados e no nosso próprio software já estão codificadas e bem funcionais. Tudo que precisamos agora é de um programinha exemplo para testarmos estas classes e ver como iriam ser realmente usadas.</p>
<p>Segue a classe que contém o método <em>main</em> desta aplicação:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #003399;">Principal</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ApplicationContext ctx <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClassPathXmlApplicationContext<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/conf/spring_jdbc.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        BancoDados banco <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>BancoDados<span style="color: #009900;">&#41;</span> ctx.<span style="color: #006633;">getBean</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;banco_dados&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//cria os objetos Pessoa</span>
        Pessoa p1 <span style="color: #339933;">=</span> criar_pessoa<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #0000ff;">&quot;Felipe&quot;</span>, <span style="color: #cc66cc;">18</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Pessoa p2 <span style="color: #339933;">=</span> criar_pessoa<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #0000ff;">&quot;Felipe Saab&quot;</span>, <span style="color: #cc66cc;">21</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Pessoa felipe <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//insere no banco</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            banco.<span style="color: #006633;">InserirPessoa</span><span style="color: #009900;">&#40;</span>p1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;1 - Pessoa Inserida&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível inserir o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recupera</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            felipe <span style="color: #339933;">=</span> banco.<span style="color: #006633;">SelecionarPessoa</span><span style="color: #009900;">&#40;</span>p1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;2 - Pessoa recuperada: &quot;</span> <span style="color: #339933;">+</span> felipe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível recuperar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//altera</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            banco.<span style="color: #006633;">AtualizarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;3 - Pessoa Atualizada&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível atualizar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recupera novamente</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            felipe <span style="color: #339933;">=</span> banco.<span style="color: #006633;">SelecionarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;4 - Pessoa recuperada: &quot;</span> <span style="color: #339933;">+</span> felipe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível recuperar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//apaga</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            banco.<span style="color: #006633;">ApagarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;5 - Pessoa Apagada&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível apagar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//procura pela ultima vez</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            felipe <span style="color: #339933;">=</span> banco.<span style="color: #006633;">SelecionarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;6 - Pessoa recuperada: &quot;</span> <span style="color: #339933;">+</span> felipe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível recuperar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> Pessoa criar_pessoa<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod, <span style="color: #003399;">String</span> nome, <span style="color: #000066; font-weight: bold;">int</span> idade<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Pessoa p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        p.<span style="color: #006633;">setCod</span><span style="color: #009900;">&#40;</span>cod<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        p.<span style="color: #006633;">setNome</span><span style="color: #009900;">&#40;</span>nome<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        p.<span style="color: #006633;">setIdade</span><span style="color: #009900;">&#40;</span>idade<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> p<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Concordo que o exemplo é meio grandinho mas é bem fácil de entender não é?<br />
Primeiro foram criados 3 objetos Pessoa (<strong>p1</strong> &#8211; &#8220;Felipe&#8221;, <strong>p2</strong> &#8211; &#8220;Felipe Saab&#8221; e <strong>felipe</strong> que irá receber o resultado da busca no banco), depois foi inserido um dos objetos, procurado por ele no banco, depois ele foi alterado com as informações do outro objeto e foi recuperado novamente, e por fim a Pessoa foi apagada do banco e só para garantir foi feita uma última busca.</p>
<p>Este exemplo foi só para testar todas as operações que nós implementamos. Caso você use algo parecido no seu software do dia a dia irá ver que tudo funciona perfeitamente bem (cada operação no teu lugar certo).</p>
<p>É isso ai leitor! Você chegou ao fim deste post grandão!! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Espero que tenha gostado da leitura e da função que foi descrita aqui.</p>
<p>Caso queira fazer o download do projeto que eu desenvolvi como exemplo pode fazer o download <a href="http://dl.dropbox.com/u/4918828/Spring_JDBC.rar">aqui</a> (OBS: o projeto está com bibliotecas do NetBeans 6.8 (Spring 2.5 e MySQL JDBC) então ele só vai rodar 100% certo caso você abra ele no NetBeans 6.8 ou superior, caso contrario, apenas aproveite os códigos fonte =] ).</p>
<p>[]s e até a próxima,<br />
Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/spring-2/spring-framework-parte-3-java-database-connectivity-jdbc/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Death to DefaultTableModel! AbstractTableModel Rulez!</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez</link>
		<comments>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comments</comments>
		<pubDate>Fri, 25 Jun 2010 03:40:06 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[SWING/AWT]]></category>
		<category><![CDATA[abstract]]></category>
		<category><![CDATA[abstracttablemodel]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[defaulttablemodel]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jtable]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171</guid>
		<description><![CDATA[Antes que alguém venha dizer: &#8216;Olha o título, esse cara num sabe nada!&#8217; ou &#8216;DefaultTableModel extends AbstractTableModel!! Asshole!!!&#8217; eu já vou dizendo: Eu sei que DefaultTableModel herda de AbstractTableModel, a ideia do título é abandonar a DefaultTableModel e criar suas próprias classes utilizando os métodos da AbstractTableModel do jeito que nos servir melhor. Dito isso, [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Antes que alguém venha dizer: &#8216;Olha o título, esse cara num sabe nada!&#8217; ou &#8216;DefaultTableModel extends AbstractTableModel!! Asshole!!!&#8217; eu já vou dizendo: Eu sei que DefaultTableModel herda de AbstractTableModel, a ideia do título é abandonar a DefaultTableModel e criar suas próprias classes utilizando os métodos da AbstractTableModel do jeito que nos servir melhor.</p>
<p>Dito isso, vamos  ao assunto de hoje: &#8216;DefaultTableModel e o porque de não utilizá-la&#8217;.</p>
<p>Quem já programou utilizando a API Swing e nunca utilizou a JTable que atire a primeira pedra.</p>
<p>Agora, quem já usou JTable e nunca utilizou a DefaultTableModel pode atirar pedras a vontade!</p>
<p>Aqui no blog mesmo&#8230; Eu já utilizei DefaultTabelModel em alguns posts. Mas pois bem, vamos abolir essa má prática. Seguem alguns motivos do porque não devemos utilizar a DefaultTableModel:</p>
<p>1. É mais difícil que escrever seu próprio TableModel;<br />
2. É mais lento (usa classes sincronizadas);<br />
3. Ocupa mais espaço em memória (duplica seus dados);<br />
4. Deixa o código mais confuso e difícil de manter;<br />
5. Usa casts inseguros;<br />
6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;<br />
7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.</p>
<p>Motivos muito bem explicados pelo ViniGodoy <a href="http://www.guj.com.br/posts/list/15/149861.java#813171" target="_blank">neste post</a> do <a href="http://www.guj.com.br" target="_blank">GUJ</a>.</p>
<p>Mas se a DefaultTableModel é tão ruim assim, o que devemos fazer? Tudo se resume a uma classe: AbstractTableModel.</p>
<p><!--:--><span id="more-171"></span><!--:pt--></p>
<p>Tudo o que temos que fazer é criar uma nova classe que estenda AbstractTableModel e customizá-la para exibir os dados que queremos. Concordo que em um primeiro momento vai parecer meio desnecessário escrever uma classe para cada tabela do seu sistema (ou uma genérica), mas isso compensa muito na hora de utilizá-la, e compensa mais ainda na hora de reutilizá-la (o famoso reuso da orientação a objetos).</p>
<p>Mas chega de conversa, vamos a prática pois é o melhor jeito de fixar as coisas&#8230;</p>
<p>Nosso escopo será o seguinte: uma loja qualquer quer controlar seu estoque. Em algum lugar dentro do software que realizará esta tarefa vai ter uma tela de consulta dos produtos e suas respectivas quantidades disponíveis em estoque.</p>
<p>É nessa tela que nosso tutorial irá decorrer. Uma tela de consulta de produtos com alguns botões só para demonstrar o funcionamento do nosso modelo.</p>
<p>Abra o NetBeans, crie um novo projeto para área de trabalho, apague tudo que ele cria, crie um novo pacote, crie um novo JFrame dentro dele e deixe parecido com este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/Capturar1.png"><img class="aligncenter size-full wp-image-176" title="atm_form" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/Capturar1.png" alt="" width="318" height="390" /></a></p>
<p>O JFrame contém os seguintes componentes:</p>
<ul>
<li>1 JTable (que já vem dentro do seu JScrollPane)</li>
<li>5 JButtons</li>
</ul>
<p>Os textos dos botões já explicam qual será a função de cada um deles certo?</p>
<p>Agora vamos a nossa classe base (da camada de modelo) que vai representar os produtos do nosso controle de estoque. Segue a classe Produto.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Produto <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> nome<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> quant<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod, <span style="color: #003399;">String</span> nome, <span style="color: #000066; font-weight: bold;">int</span> quant<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> cod<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> nome<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">quant</span> <span style="color: #339933;">=</span> quant<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCod<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setCod<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNome<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setNome<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> nome<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getQuant<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> quant<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setQuant<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> quant<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">quant</span> <span style="color: #339933;">=</span> quant<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Uma simples classe para representar um produto. Coloquei o código também porque geralmente sempre precisamos controlar o código dos registros que estão sendo apresentados na tabela. Utilizando DefaultTableModel nós deveríamos ter uma lista separada para poder controlar esses códigos. Mais a frente veremos como seria com nosso novo modelo para a tabela.</p>
<p>Vamos agora para a parte que importa: criar uma classe que herde de AbstractTableModel. A classe AbstractTableModel define alguns métodos que nós podemos reescrever para criar um modelo bem mais fácil de trabalhar. Seguem os métodos, que iremos utilizar neste exemplo, e suas respectivas funções:</p>
<ul>
<li>int getRowCount() -&gt; retorna o número de linhas que a tabela tem;</li>
<li>int getColumnCount() -&gt; retorna o número de colunas que a tabela tem;</li>
<li>String getColumnName(int column)-&gt; retorna o nome que será exibido na coluna (o índice da primeira coluna é 0);</li>
<li>Class&lt;?&gt; getColumnClass(int columnIndex) -&gt; retorna a classe que representa cada coluna. String irá mostrar o texto alinhado à esquerda, Integer irá mostrar o número alinhado à direita, Boolean irá mostrar um checkbox&#8230; ;</li>
<li>Object getValueAt(int rowIndex, int columnIndex) -&gt; método utilizado pela JTable para escrever os valores nas células. Internamente a JTable passa em todas as celulas chamando este método para poder setar os valores;</li>
<li>??void setValueAt(Object aValue, int rowIndex, int columnIndex) -&gt; método que a JTable chama quando uma célula é editada;</li>
<li>boolean isCellEditable(int rowIndex, int columnIndex) -&gt; método para saber se a célula é ou não editável;</li>
<li>void fireTableDataChanged() -&gt; método que avisa todos os listeners da tabela que houve uma mudança nos dados, um deles é o responsável por desenhar a tabela e ao ser notificado irá redesenhá-la.</li>
</ul>
<p>Ok, agora que já conhecemos alguns dos métodos que a AbstractTableModel fornece, vamos reescrevê-los. Segue o código do arquivo ProdutoTableModel.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ProdutoTableModel <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">AbstractTableModel</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//constantes que vão representar as colunas</span>
    <span style="color: #666666; font-style: italic;">//(só para facilitar o entendimento do código)</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> COL_NOME <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> COL_QUANT <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//lista dos produtos que serão exibidos</span>
    <span style="color: #000000; font-weight: bold;">private</span> List<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span> produtos<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> ProdutoTableModel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> ProdutoTableModel<span style="color: #009900;">&#40;</span>List<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span> lista<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        produtos.<span style="color: #006633;">addAll</span><span style="color: #009900;">&#40;</span>lista<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getRowCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//cada produto na lista será uma linha</span>
        <span style="color: #000000; font-weight: bold;">return</span> produtos.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getColumnCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//vamos exibir só Nome e Quantidade, então são 2 colunas</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getColumnName<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> column<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//qual o nome da coluna</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>column <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Nome&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>column <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Quant. Disp&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">Class</span> getColumnClass<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//retorna a classe que representa a coluna</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">String</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">Integer</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">String</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> getValueAt<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> rowIndex, <span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//pega o produto da linha</span>
        Produto p <span style="color: #339933;">=</span> produtos.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>rowIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//verifica qual valor deve ser retornado</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> p.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> p.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setValueAt<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> aValue, <span style="color: #000066; font-weight: bold;">int</span> rowIndex, <span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//pega o produto da linha</span>
        Produto p <span style="color: #339933;">=</span> produtos.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>rowIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//verifica qual valor vai ser alterado</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            p.<span style="color: #006633;">setNome</span><span style="color: #009900;">&#40;</span>aValue.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            p.<span style="color: #006633;">setQuant</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>aValue.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que os dados mudaram</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> isCellEditable<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> rowIndex, <span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//no nosso caso todas vão ser editáveis, entao retorna true pra todas</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Até agora eu só reescrevi os métodos que foram citados anteriormente. Agora nós vamos à parte produtiva da coisa: vamos escrever os métodos para inserir um novo produto, para remover produtos, para ordená-los e para embaralhá-los, ou seja, vamos dar vida aos nossos botões e o melhor: ver como isso é muito fácil!</p>
<p>Mais alguns métodos para a nossa classe ProdutoTableModel.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> inserir<span style="color: #009900;">&#40;</span>Produto p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> excluir<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> pos<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> excluir<span style="color: #009900;">&#40;</span>Produto p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ordenarPorNome<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//ordena pelo nome</span>
        <span style="color: #003399;">Collections</span>.<span style="color: #006633;">sort</span><span style="color: #009900;">&#40;</span>produtos, <span style="color: #000000; font-weight: bold;">new</span> Comparator<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> compare<span style="color: #009900;">&#40;</span>Produto o1, Produto o2<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">return</span> o1.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">compareTo</span><span style="color: #009900;">&#40;</span>o2.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que a tabela foi alterada</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ordenarPorQuantidade<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//ordena pelo nome</span>
        <span style="color: #003399;">Collections</span>.<span style="color: #006633;">sort</span><span style="color: #009900;">&#40;</span>produtos, <span style="color: #000000; font-weight: bold;">new</span> Comparator<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> compare<span style="color: #009900;">&#40;</span>Produto o1, Produto o2<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">return</span> o1.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> o2.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que a tabela foi alterada</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> misturar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//mistura a lista</span>
        <span style="color: #003399;">Collections</span>.<span style="color: #006633;">shuffle</span><span style="color: #009900;">&#40;</span>produtos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que a tabela foi alterada</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto getProduto<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> pos<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> pos <span style="color: #339933;">&gt;=</span> produtos.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> produtos.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto! Veja como é fácil manipular os dados da tabela agora. Basta manipular uma lista!</p>
<p>Acho que os únicos métodos que merecem alguma explicação são os de ordenação, onde, em cada um deles é criado um objeto que implementa a interface <strong>Comparator </strong>que ordena de acordo com a necessidade: se é por ordem alfabética dos nomes, compara os nomes, se é pela quantidade em estoque, compara as quantidades.</p>
<p>OBS: Lembre sempre de chamar o método <strong>fireTableDataChanged()</strong> para avisar que os dados mudaram e a tabela ser redesenahda.</p>
<p>Voltando para aquela ideia de que esta tela seria uma tela de busca&#8230; possívelmente ela poderia ser chamada de uma outra tela (a de entrada de produtos por exemplo) para facilitar a busca de um produto. Como seria a recuperação do código do produto selecionado na tabela? Mais ou menos assim:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BuscaProdutos <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JDialog</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//....</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto retornaProdutoSelecionado<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ProdutoTableModel model <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>ProdutoTableModel<span style="color: #009900;">&#41;</span> jT_TabelaProdutos.<span style="color: #006633;">getModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> model.<span style="color: #006633;">getProduto</span><span style="color: #009900;">&#40;</span>jT_TabelaProdutos.<span style="color: #006633;">getSelectedRow</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> EntradaProdutos <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JDialog</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//...</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> buscaProduto<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//cria a tela de busca como modal</span>
        BuscaProdutos tela_busca <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> BuscaProdutos<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span>, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//exibe</span>
        tela_busca.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recupera os dados</span>
        Produto p <span style="color: #339933;">=</span> tela_busca.<span style="color: #006633;">retornaProdutoSelecionado</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>p <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            jTF_Codigo.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>p.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            jTF_Nome.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>p.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            jTF_Quantidade.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>p.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A tabela ficaria na tela de busca. Tal tela seria chamada como modal (só ela poderia ter o foco enquanto estivesse visível) e quando se tornasse invisível, o produto selecionado seria recuperado e usado como necessário.</p>
<p>Quanto trabalho não seria necessário para fazer isso utilizando a DefaultTableModel?</p>
<p>Voltando à nossa aplicação inicial, ainda temos que linkar os botões com as funções do modelo. Vamos ao código da classe Principal.java (JFrame da foto lá em cima):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #003399;">Principal</span> <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> ProdutoTableModel model<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//variável só para controlar os códigos dos produtos</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> ultimoCod<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        initComponents<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        ultimoCod <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//cria a lista com os produtos</span>
        List<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span> lista <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Lapiseira 0.7&quot;</span>,<span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Caneta preta&quot;</span>,<span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Caneta azul&quot;</span>,<span style="color: #cc66cc;">70</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Caneta vermelha&quot;</span>,<span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//cria o modelo de Produto</span>
        model <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ProdutoTableModel<span style="color: #009900;">&#40;</span>lista<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//atribui o modelo à tabela</span>
        jTable1.<span style="color: #006633;">setModel</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Inserir</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton1ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Random</span> r <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Produto p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>, <span style="color: #0000ff;">&quot;Produto &quot;</span><span style="color: #339933;">+</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>r.<span style="color: #006633;">nextInt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>, r.<span style="color: #006633;">nextInt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        model.<span style="color: #006633;">inserir</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Excluir</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton2ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">int</span> selecionados<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> jTable1.<span style="color: #006633;">getSelectedRows</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>selecionados.<span style="color: #006633;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            List<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span> seraoExcluidos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>produto<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>selecionados.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
                seraoExcluidos.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>model.<span style="color: #006633;">getCliente</span><span style="color: #009900;">&#40;</span>selecionados<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Produto p <span style="color: #339933;">:</span> seraoExcluidos<span style="color: #009900;">&#41;</span>
                model.<span style="color: #006633;">excluir</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Selecione alguém neh...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Ordenar por Quantidade</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton5ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        model.<span style="color: #006633;">ordenarPorQuantidade</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Ordenar por Nome</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton3ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        model.<span style="color: #006633;">ordenarPorNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Misturar</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton4ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        model.<span style="color: #006633;">misturar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #339933;">/</span>...
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>No construtor é criada uma lista com alguns produtos fictícios e também é instanciado o nosso TableModel.</p>
<p>O botão inserir insere um produto com o nome &#8220;Produto i&#8221; e quantidade Q, onde &#8216;i&#8217; e &#8216;Q&#8217; são números randômicos.</p>
<p>O botão excluir trata a exclusão de vários ítens selecionados ao mesmo tempo. Primeiro todos são guardados em uma lista auxiliar e depois eles vão sendo excluídos um a um (Você sabe por que eu fiz assim? Pense um pouco&#8230; qualquer coisa a área de comentários está logo abaixo).</p>
<p>Os botões Ordenar por Nome, Ordenar por Quantidade e Misturar são auto explicativos e fazem exatamente o que o seu nome quer dizer.</p>
<p>Bom, chegamos ao fim de mais um artigo aqui do Java Simples. E fica meu conselho: pare de usar DefaultTableModel e começe agora mesmo a escrever suas próprias TableModels.</p>
<p>O código fonte do projeto está disponível <a href="http://dl.dropbox.com/u/4918828/AbstractTableModel.rar">aqui</a>! E se achou interessante compartilhe este artigo utilizando a barra social logo abaixo. =]</p>
<p>[]s e até a próxima,<br />
Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez/feed</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Web Services de um jeito bem simples</title>
		<link>http://www.javasimples.com.br/web-service/web-services-de-um-jeito-bem-simples</link>
		<comments>http://www.javasimples.com.br/web-service/web-services-de-um-jeito-bem-simples#comments</comments>
		<pubDate>Sun, 20 Jun 2010 02:09:57 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Web Service]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jax]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ws]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=151</guid>
		<description><![CDATA[Web Services (Serviços Web) são softwares que ficam esperando requisições de outros softwares. Uma vez que essas requisições são recebidas, é identificado o serviço que está sendo requisitado, o serviço é executado e finalmente a resposta é devolvida para quem pediu. Em um resumo bem grosso, isso é um web service. Um programa que executa [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Web Services (Serviços Web) são softwares que ficam esperando requisições de outros softwares. Uma vez que essas requisições são recebidas, é identificado o serviço que está sendo requisitado, o serviço é executado e finalmente a resposta é devolvida para quem pediu.</p>
<p>Em um resumo bem grosso, isso é um web service. Um programa que executa um método e devolve a resposta pra outro programa que pediu.</p>
<p>Por que eles são tão famosos? Uma das vantagens é a independência de linguagem, ou seja, um web service implementado em Java pode muito bem ser consumido (termo comum quando se fala em web services, equivalente a &#8220;usar&#8221;) por um outro software implementado em C# ou Python ou qualquer outra linguagem, pois o XML é adotado para garantir a comunicação padronizada.</p>
<p>Existem alguns tipos diferentes de web services onde, dentre eles, os que utilizam SOAP/ WSDL e os baseados no modelo arquitetural REST são os mais conhecidos. Neste post eu irei explicar como criar e consumir web services que utilizam SOAP e WSDL, e irei assumir que você já tenha pelo menos uma ideia do que estas siglas significam.</p>
<p>Eu poderia escrever uns dois ou três posts só sobre a teoria e aplicações, mas ficaria meio chato&#8230; Como o legal é a prática, vamos imaginar uma situação problema e criar um web service para resolver esse problema.</p>
<p><!--:--><span id="more-151"></span><!--:pt--></p>
<p>Vamos imaginar o seguinte cenário: um jornal quer disponibilizar um serviço para distribuir notícias pela internet. Sendo assim as pessoas podem colocar informações confiáveis no seu site, e toda vez que o pessoal da redação adicionar uma nova notícia, ela aparece em todos os sites que consomem o serviço.</p>
<p>Com esse cenário em mente, vamos ao Java. Estou utilizando o NetBeans 6.8 que tem uns assistentes bem legais para usar web services.</p>
<p>Vamos criar um novo projeto Web que será o nosso web service. Eu dei o nome de WSNoticias e como container escolhi o Tomcat 6.0.20.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_projeto1.png"><img class="aligncenter size-medium wp-image-153" title="novo_projeto" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_projeto-300x207.png" alt="" width="300" height="207" /></a></p>
<p>Agora vamos criar o Web Service propriamente dito. Botão direito no projeto, Novo, Outro. Selecione a categoria Serviços Web e depois selecione Serviço Web.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_servico2.png"><img class="aligncenter size-medium wp-image-155" title="novo_servico" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_servico-300x208.png" alt="" width="300" height="208" /></a></p>
<p>Dei o nome de &#8216;ServicoNoticias&#8217; para o serviço e para o pacote dei o nome &#8216;ws&#8217;.</p>
<p>O NetBeans já cria a classe que será nosso serviço web. Vamos agora pensar em quais métodos estarão disponíveis para as pessoas utilizarem.</p>
<p>No nosso caso (jornal, notícias, &#8230;), o web service terá apenas um método chamado &#8220;recuperaNoticias()&#8221; que retorna uma lista de objetos &#8220;Noticia&#8221;. A partir dai a aplicação que recuperar essa lista irá exibí-la da maneira que achar melhor.</p>
<p>Vamos então ao código da classe Noticia (dentro do pacote &#8216;modelo&#8217;):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Noticia <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> titulo<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> texto<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> titulo, <span style="color: #003399;">String</span> texto<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">titulo</span> <span style="color: #339933;">=</span> titulo<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">texto</span> <span style="color: #339933;">=</span> texto<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getTexto<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> texto<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setTexto<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> texto<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">texto</span> <span style="color: #339933;">=</span> texto<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getTitulo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> titulo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setTitulo<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> titulo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">titulo</span> <span style="color: #339933;">=</span> titulo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Apenas uma simples classe que vai representar as notícias, nada de mais.</p>
<p>Agora vamos para a classe do web service de novo e vamos adicionar uma nova operaçao. Abra a classe do web service. Na parte de cima do editor de texto do NetBeans vai ter duas opções: &#8220;Código Fonte&#8221; e &#8220;Projeto&#8221;. Selecione Projeto e clique em &#8220;Adicionar operação&#8230;&#8221;.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/nova_operacao1.png"><img class="aligncenter size-medium wp-image-157" title="nova_operacao" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/nova_operacao-300x218.png" alt="" width="300" height="218" /></a></p>
<p>Como a nossa operação é bem simples, vai apenas retornar as notícias, só precisamos definir o nome e o tipo de retorno. Aqui o tipo deve ser sempre totalmente qualificado, ou seja, o nome do pacote que ele está e o nome da classe.</p>
<p>Voltado pra exibição do código fonte, o NetBeans já criou o método. Vamos ao código dele:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@WebMethod<span style="color: #009900;">&#40;</span>operationName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;recuperaNoticias&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> java.<span style="color: #006633;">util</span>.<span style="color: #003399;">ArrayList</span> recuperaNoticias<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">ArrayList</span> lista <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia1&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia2&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia3&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia4&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 4&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> lista<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Para não estender muito o post, não vou utilizar banco de dados, vamos apenas simular que o método retorne algumas notícias, mas o correto seria realizar a conexão e recuperar os dados de algum outro lugar.</p>
<p>Pronto! Esse é o nosso web service! Execute a aplicação e o NetBeans irá iniciar o Tomcat, irá fazer o deploy da aplicação e irá abrir o browser no caminho do Web Service.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/servico_online1.png"><img class="aligncenter size-medium wp-image-158" title="servico_online" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/servico_online-300x197.png" alt="" width="300" height="197" /></a></p>
<p>Apareceu esse Heelo World! porque a página index.html não foi alterada, mas tudo bem, a interface gráfica não interessa, o que interessa é que o web service já está rodando no container, já está esperando por requisições. Tudo o que temos que fazer é criar um software que consuma esse web service.</p>
<p>A URL do WSDL do web service é: http://localhost:8084/WSNoticias/ServicoNoticias?wsdl</p>
<p>A URL do WSDL é sempre composta da seguinte maneira: http://&lt;servidor&gt;:&lt;porta&gt;/&lt;nome_aplicacao&gt;/&lt;nome_web_service&gt;?wsdl<br />
Lembre-se do caminho do WSDL pois eh a partir dele que o cliente vai conseguir consumir o serviço.</p>
<p>Vamos criar agora um novo site que exiba as notícias então: crie uma nova Aplicação Web (eu chamei de WSNoticias_Cliente) e vamos criar as classes necessárias para consumir o serviço (quando eu digo nós, eu quero dizer: o NetBeans): botão direito no projeto e clique em Novo, Outro. Na categoria selecione &#8220;Serviços Web&#8221; e então &#8220;Cliente para serviço Web&#8221;.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente1.png"><img class="aligncenter size-medium wp-image-161" title="novo_cliente" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente-300x206.png" alt="" width="300" height="206" /></a></p>
<p>Na próxima tela existem 3 opções para criar um cliente:</p>
<p>Projeto -&gt; caso o projeto do NetBeans do web service esteja no mesmo computador, você pode importar as configurações dele apenas especificando qual é o projeto;</p>
<p>Arquivo Local -&gt; caso você tenha o arquivo WSDL salvo localmente, basta apontá-lo;</p>
<p>WSDL URL -&gt; para web services que você só sabe a URL do arquivo WSDL, basta informar a URL que o NetBeans vai buscar o arquivo.</p>
<p>No nosso caso, poderíamos utilizar a primeira opção, porém eu prefiro passar a URL do WSDL, fica a critério de cada um. E não esqueçam de por o nome de um pacote para os arquivos que serão gerados.<br />
<a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente21.png"><img class="aligncenter size-medium wp-image-162" title="novo_cliente2" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente2-300x207.png" alt="" width="300" height="207" /></a></p>
<p>Se tudo der certo o NetBeans vai gerar alguns arquivos que vão possibilitar o nosso site consumir aquele web service.</p>
<p>Uma nova pasta será criada no projeto: &#8220;Códigos-fonte gerados (jax-ws)&#8221; e dentro dela está o pacote que contém os arquivos. Você pode fuçar a vontade para ver como as coisas acontecem, mas para este post só algumas classes são relevantes:</p>
<p>Noticia -&gt; repare que todas as classes customizadas que o web service retorna ou recebe como parâmetro ou até mesmo classes de exceção são criadas para que possa haver uma comunicação correta;</p>
<p>ServicoNoticiasService -&gt; essa classe é a responsável por criar a comunicação com o web service.</p>
<p>ServicoNoticias -&gt; esta interface é que define quais são os métodos disponíveis pelo web service.</p>
<p>Eu vou fazer algo MUITO errado agora, que é utilizar scriptlets no JSP para controlar toda a lógica da minha aplicação, mas como é só para efeitos de demonstração, então tudo bem.</p>
<p>Segue o código da página index.html do projeto WSNoticias_Cliente:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;%</span>@page contentType<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html&quot;</span> pageEncoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;!</span>DOCTYPE <span style="color: #003399;">HTML</span> <span style="color: #000000; font-weight: bold;">PUBLIC</span> <span style="color: #0000ff;">&quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span>
   <span style="color: #0000ff;">&quot;http://www.w3.org/TR/html4/loose.dtd&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;%</span>@page <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;ws.cliente.*&quot;</span> <span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>meta http<span style="color: #339933;">-</span>equiv<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Content-Type&quot;</span> content<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html; charset=UTF-8&quot;</span><span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span>Notícias<span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;%</span>
            <span style="color: #666666; font-style: italic;">//cria a comunicação com o Web Service</span>
            ServicoNoticiasService ws <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ServicoNoticiasService<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//recupera uma classe que implemente a interface do nosso Web Service</span>
            ServicoNoticias noticias <span style="color: #339933;">=</span> ws.<span style="color: #006633;">getServicoNoticiasPort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//agora basta utilizar os métodos disponíveis pelo web service</span>
            java.<span style="color: #006633;">util</span>.<span style="color: #006633;">List</span><span style="color: #339933;">&lt;</span>noticia<span style="color: #339933;">&gt;</span> lista <span style="color: #339933;">=</span> noticias.<span style="color: #006633;">recuperaNoticias</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//exibindo na pagina</span>
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Noticia n <span style="color: #339933;">:</span> lista<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                out.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>n.<span style="color: #006633;">getTitulo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;br /&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                out.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>n.<span style="color: #006633;">getTexto</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;hr /&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #339933;">%&gt;</span>
    <span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Os comentários no código explicam tudo o que está acontecendo: primeiro é feita a conexão com o web service, depois é recuperada uma classe que consegue executar os métodos do web service e dai pra frente basta chamar os métodos e utilizá-los.</p>
<p>O resultado foi este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/cliente_online1.png"><img class="aligncenter size-medium wp-image-165" title="cliente_online" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/cliente_online-300x252.png" alt="" width="300" height="252" /></a></p>
<p>Bom, é isso ai.</p>
<p>Eu pessoalmente achei muito produtivo o NetBeans para a criação e consumação de Web Services, um jeito realmente muito simples.</p>
<p>Quem quiser pegar os projetos, estão <a href="http://dl.dropbox.com/u/4918828/Web%20Services.rar" target="_blank">aqui</a>.</p>
<p>[]s e até a próxima,<br />
Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/web-service/web-services-de-um-jeito-bem-simples/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Criando um cliente para Twitter – Parte 2</title>
		<link>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-2</link>
		<comments>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-2#comments</comments>
		<pubDate>Mon, 01 Mar 2010 02:02:23 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Twitter]]></category>
		<category><![CDATA[acessar]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[integrar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/</guid>
		<description><![CDATA[Foi mal a demora pessoal, o tempo tah foda aqui… Se você caiu de paraquedas nesse post eu sugiro a leitura do post anterior: Criando um cliente para Twitter – Parte 1. Segunda parte do nosso tutorialzinho! Agora iremos criar: Um formulário para realizar o login (sem utilizar o OAuth) Um formulário para: mostrar os [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Foi mal a demora pessoal, o tempo tah foda aqui…</p>
<p>Se você caiu de paraquedas nesse post eu sugiro a leitura do post anterior: <a href="http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-1/" target="_blank">Criando um cliente para Twitter – Parte 1</a>.</p>
<p>Segunda parte do nosso tutorialzinho!<br />
Agora iremos criar:</p>
<ul>
<li>Um formulário para realizar o login (sem utilizar o OAuth)</li>
<li>Um formulário para:
<ul>
<li>mostrar os ultimos tweets da timeline</li>
<li>possibilitar o envio de um tweet</li>
</ul>
</li>
</ul>
<p><!--:--><span id="more-102"></span><!--:pt--></p>
<p>Vamos lá então, crie um novo projeto no NetBeans e adicione o twitter4j nas bibliotecas.<br />
Adicione um JFrame e deixe parecido com este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image3.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb3.png" border="0" alt="image" width="195" height="180" /></a></p>
<p>O campo para usuário é um JTextField com o nome jTF_Nome.<br />
O campo para a senha é um JPasswordField com o nome jPF_Senha.<br />
O JButton não tem nada de mais, só coloquei o passarinho ai pra ficar mais bonitinho. ^^</p>
<p>O JPasswordField é mais do que um JTextField que mascara as letras, existem todo um esquema de segurança por trás deste componente. Tanto que a recuperação do que foi digitado é um pouco mais chatinha: ao invés de uma String, é recuperado um objeto do tipo char[]. Como o login é exige duas strings (usuário e senha) como parâmetro, fiz um método para realizar a conversão.<br />
Vamos ao código do botão responsável pelo login:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> pegaSenha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> senha <span style="color: #339933;">=</span> jPF_Senha.<span style="color: #006633;">getPassword</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">String</span> str <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> senha.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		str <span style="color: #339933;">+=</span> senha<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">return</span> str<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> EfetuarLogin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">String</span> usu <span style="color: #339933;">=</span> jTF_Usuario.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">String</span> senha <span style="color: #339933;">=</span> pegaSenha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		Twitter t <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TwitterFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span>usu, senha<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		User u <span style="color: #339933;">=</span> t.<span style="color: #006633;">verifyCredentials</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003399;">Principal</span> p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span>t,u<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		p.<span style="color: #006633;">setLocationRelativeTo</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		p.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">dispose</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getStatusCode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">401</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Usuário e/ou senha inválidos!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Nada muito novo em relação ao post anterior. É criado um novo objeto Twitter com os dados que foram digitados. Para garantir que os dados estão corretos existe o método <strong>verifyCredentials()</strong> que em caso de sucesso retorna um objeto <strong>User</strong> que referencia o usuário que acabou de se logar.  Se estiver tudo certo então chama o próximo JFrame (Principal) e retira o formulário de login da memória (uma vez que ele não será mais usado).</p>
<p>Em caso de falha, é jogada uma exceção do tipo <strong>TwitterException</strong>. Se o status code da exceção for 401 significa que o usuário e/ou senha estão errados, daí é só avisar o usuário.</p>
<p>O próximo formulário é um pouco mais complexo… Adicione um novo JFrame ao projeto e chame de Principal.java. Deixe ele parecido como este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image11.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb11.png" border="0" alt="image" width="432" height="688" /></a></p>
<p>Segue a lista dos componentes:</p>
<p>JLabel jL_Foto –&gt; tamanho 48&#215;48</p>
<p>JTextArea jTA_Status –&gt; pra digitar a mensagem</p>
<p>JLabel jL_Restantes –&gt; vai indicar quantos caracteres ainda restam</p>
<p>JScrollPane jScrollPane2 –&gt; a borda foi mudada para ficar mais legal como esta na figura (Ultimos Tweets)</p>
<p>JPanel jP_Tweets –&gt; este panel vai receber os ultimos tweets, ele fica dentro do jScrollPane2. O layout desse panel é do tipo BoxLayout (layout de caixa)  com a propriedade eixo setada em Y.</p>
<p>Vamos lá então! Exibindo os últimos tweets:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #003399;">Principal</span> <span style="color: #000000; font-weight: bold;">extends</span> javax.<span style="color: #006633;">swing</span>.<span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Twitter t<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> User eu<span style="color: #339933;">;</span>
    <span style="color: #003399;">Image</span> foto<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/** Creates new form Principal */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span>Twitter t, User eu<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">t</span> <span style="color: #339933;">=</span> t<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">eu</span> <span style="color: #339933;">=</span> eu<span style="color: #339933;">;</span>
        initComponents<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        recuperarDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> recuperarDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">foto</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span>eu.<span style="color: #006633;">getProfileImageURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jL_Foto.<span style="color: #006633;">setIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span>foto<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JPanel</span> pane<span style="color: #339933;">;</span>
            <span style="color: #003399;">JLabel</span> novaFoto<span style="color: #339933;">;</span>
            <span style="color: #003399;">JTextArea</span> msg<span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
            jP_Tweets.<span style="color: #006633;">removeAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Status s <span style="color: #339933;">:</span> t.<span style="color: #006633;">getFriendsTimeline</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                i<span style="color: #339933;">++;</span>
                <span style="color: #666666; font-style: italic;">//cria o panel</span>
                pane <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JPanel</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FlowLayout</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">FlowLayout</span>.<span style="color: #006633;">LEFT</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">setBorder</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">LineBorder</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">black</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">370</span>, <span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">//cria o label com a foto</span>
                novaFoto <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JLabel</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getProfileImageURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">//cria o textarea com o texto</span>
                msg <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextArea</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">27</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setEditable</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setLineWrap</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                pane.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>novaFoto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                jP_Tweets.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>pane<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Erro recuperando a timeline: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ...
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A classe possui 3 atributos que eu considero completamente autoexplicativos mas vamos dar uma pequena passada por eles:</p>
<ul>
<li>Twitter t –&gt; velho conhecido nosso não é…</li>
<li>User eu –&gt; para guardar as informações de quem está logado</li>
<li>Image foto –&gt; para guardar a imagem de perfil do usuário</li>
</ul>
<p>Logo quando o formulário é criado, o método <strong>recuperarDados()</strong> é chamado, a foto do usuário é carregada e então o método <strong>carregaTimeline()</strong> é invocado.</p>
<p>O <strong>carregaTimeline()</strong> cria dinamicamente a lista com os ultimos tweets. O código está todo comentado e está bem fácil de entender.</p>
<p>Vale ressaltar que para a lista ficar certinha (um tweet por linha) o layout do panel jP_Tweets deve ser BoxLayout!</p>
<p>Vamos para a próxima parte então: Atualizando o status.</p>
<p>Mude a propriedade lineWrap do jTA_Status para true, com isso a linha não vai ultrapassar os limites do text area e o texto vai ficar dentro dela.</p>
<p>Para fazer a contagem dos caracteres restantes vamos utilizar de uma funcionalidade bem interessante do text area: O evento caretUpdate é chamado toda vez que uma tecla é adiciona ou deletada, sendo assim, adicione o seguinte código neste evento caretUpdate do jTA_Status:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jTA_StatusCaretUpdate<span style="color: #009900;">&#40;</span>javax.<span style="color: #006633;">swing</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">CaretEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    jL_Restantes.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">140</span> <span style="color: #339933;">-</span> jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Próximos passos: não deixar o usuário digitar mais do que 140 caracteres e postar a mensagem.</p>
<p>O que vamos fazer é o seguinte: se o usuário for digitar o 141º a gente simplesmente cancela ele. Podemos tratar as duas funções no evento keyTyped do jTA_Status.</p>
<p>Segue o código:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jTA_StatusKeyTyped<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">KeyEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	evt.<span style="color: #006633;">setKeyChar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_CLEAR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>evt.<span style="color: #006633;">getKeyChar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_ENTER</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	    t.<span style="color: #006633;">updateStatus</span><span style="color: #009900;">&#40;</span>jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            jTA_Status.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	    carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	    <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Erro atualizando o status: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Muito tranquilo. Pouco código e muitas funcionalidades. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Agora nosso cliente já está com uma cara bem legal. Eu implementei mais algumas frescurinhas e ele ficou assim:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image21.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb21.png" border="0" alt="image" width="445" height="724" /></a></p>
<p>Ali embaixo da minha foto tem um label que mostra um pedacinho do ultimo post… embaixo da lista mostra quantos tweets foram carregados… enfim, um monte de frescura que eu nem mostrei aqui…</p>
<p>Quem quiser conferir o projeto completo pode pegar <a href="http://dl.dropbox.com/u/4918828/TwitterClienteParte2.rar" target="_blank">aqui</a>.</p>
<p>Sugestões para quem quiser aperfeiçoar um pouco mais esse humilde cliente de Twitter:</p>
<ul>
<li>De 5 em 5 minutos recarregar a lista de tweets. Dica: utilizando Threads fica facinho.</li>
<li>Ao clicar na foto da pessoa, uma janela abre com as informações da pessoa.</li>
<li>Adicionar um botão para retwittar a mensagem.</li>
</ul>
<p>Quem quiser tem como brincar bastante com isso ai…</p>
<p>Valew pessoal,</p>
<p>[]s e até a próxima.</p>
<p>Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-2/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Criando um cliente para Twitter &#8211; Parte 1</title>
		<link>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-1</link>
		<comments>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-1#comments</comments>
		<pubDate>Wed, 24 Feb 2010 23:58:28 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Twitter]]></category>
		<category><![CDATA[acessar]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[integrar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=79</guid>
		<description><![CDATA[Fim do período de manutenção! Finalmente esse blog ficou com uma interface mais agradável e bonita. Todos os créditos ao @jpalacio1988 . Muito obrigado! Vamos ao assunto de hoje: criando um cliente de Twitter. Ah o Twitter&#8230; Quem não usa o twitter? Quem nunca ouviu falar do twitter? Acho que hoje em dia é bem difícil. [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Fim do período de manutenção!<br />
Finalmente esse blog ficou com uma interface mais agradável e bonita.<br />
Todos os créditos ao <a href="http://twitter.com/jpalacio1988">@jpalacio1988</a> . Muito obrigado! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Vamos ao assunto de hoje: criando um cliente de Twitter.</p>
<p>Ah o Twitter&#8230; Quem não usa o twitter? Quem nunca ouviu falar do twitter? Acho que hoje em dia é bem difícil.<br />
Mas aproveitar todas as funcionalidades do twitter no navegador é &#8211; na minha opinião &#8211; um saco! Toda hora fica recarregando, tem horas que aparece aquela PIIII daquela baleia dizendo que o servidor está congestionado&#8230;</p>
<p>Enfim, para não passar por esses probleminhas normalmente a gente apela para os clientes de twitter, que nada mais são do que softwares que acessam o twitter com a nossa conta e mostram as atualizações de um jeito bem bonitinho e cheio de frescuras - vide TweetDeck, ÜberTwitter, entre outros.</p>
<p>Contudo, esses clientes não foram feitos especificamente para nós, ou seja, podem existir funções que não sejam do nosso gosto e pode também faltar algumas funções que sejam essenciais para nós. Então por que não criar o seu próprio cliente de Twitter? É muito simples e personalizável, podemos criá-lo do jeito que quisermos. Vamos a algumas informações essenciais:</p>
<p><!--:--><span id="more-79"></span><!--:pt--></p>
<p>Para conseguir mostrar as informações da nossa conta do Twitter em uma telinha de um software desktop, eles fazem chamadas para a <a href="http://apiwiki.twitter.com/">API do Twitter</a>. A equipe do Twitter já deixou tudo pronto pra nós não termos muito trabalho recuperando as informações. Basta fazer uma requisição HTTP e será retornado um XML com as informações requisitadas.</p>
<p>Para a sorte do desenvolvedor Java, um tal de Yusuke Yamamoto desenvolveu uma biblioteca chamada <a href="http://twitter4j.org/en/index.html">Twitter4J</a> onde ele já encapsula todas as requisições HTTP, tratamentos da resposta, enfim, é responsável por todo o trabalho duro necessário para interagir com o Twitter, sendo assim, nós podemos nos concentrar mais na aplicação em si.</p>
<p>Nessa primeira parte do tutorial vou mostrar apenas como conectar, atualizar o status e recuperar a timeline. Nas próximas partes a gente vai modelando e dando vida ao nosso cliente.</p>
<p>Mãos a obra então: baixe o <a href="http://dl.dropbox.com/u/4918828/twitter4j-core-2.1.1-SNAPSHOT.jar">twitter4j-core</a> e crie uma nova aplicação no NetBeans (não precisa ser aplicação desktop por enquanto). Adicione a biblioteca que você acabou de baixar às bibliotecas do projeto como na figura:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/projeto1.png"><img class="aligncenter size-full wp-image-84" title="projeto" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/projeto1.png" alt="" width="268" height="169" /></a></p>
<p>O código da aplicação é muito simples, como segue abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> usuario <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;seu nome de usuario&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> senha <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;sua senha&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//conectando</span>
        Twitter twitter <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TwitterFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span>usuario, senha<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recuperando a timeline</span>
        List<span style="color: #339933;">&lt;</span>status<span style="color: #339933;">&gt;</span> timeline <span style="color: #339933;">=</span> twitter.<span style="color: #006633;">getFriendsTimeline</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exibindo a timeline&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;----------------------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Status s <span style="color: #339933;">:</span> timeline<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getScreenName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; - &quot;</span> <span style="color: #339933;">+</span> s.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;----------------------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//atualizando o status</span>
        <span style="color: #003399;">String</span> novoStatus <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#JavaSimples - testando o twitter4j!&quot;</span><span style="color: #339933;">;</span>
        twitter.<span style="color: #006633;">updateStatus</span><span style="color: #009900;">&#40;</span>novoStatus<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Status atualizado com sucesso!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Erro: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Para conectar no Twitter é criado um objeto da classe Twitter que é um intermediário entre a nossa aplicação e a API do Twitter, ou seja, tudo o que nós quisermos fazer deve ser através de um método desse objeto. Ele é criado seguindo um padrão de projeto (olha a engenharia de software marcando presença&#8230;) chamado Abstract Factory &#8211; que provê a padronização na criação de um objeto, mas como a engenharia não é o foco aqui, vamos em frente.</p>
<p>Logo em seguida, é criada uma lista chamada <strong>timeline</strong> que é do tipo List&lt;Status&gt; e que recebe todas as atualizações das pessoas que você segue através do método <strong>getFriendsTimeLine() </strong>do nosso objeto da classe Twitter.<br />
Cada update/status/post de um usuário no twitter é representado pela classe Status, através da qual pode-se obter qualquer tipo de informação do update/status/post. No exemplo nós recuperamos o usuário (recuperamos um objeto da classe User que contém as informações do usuário) e a partir dele, o seu screenName (sigla que te identifica no twitter. ex: fesaab) e também o texto do update/status/post.</p>
<p>Por fim, eu atualizo o status com uma simples mensagem e se não ocorrer nenhum erro mostra uma mensagem de sucesso.</p>
<p>Tudo muito prático e simples! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Ficamos por aqui nessa primeira parte do nosso tutorial sobre Java + Twitter. Quem quiser o projeto completo pode pegar <a href="http://www.4shared.com/file/229198933/93a36af5/TwitterClienteParte1.html">aqui</a>.</p>
<p>[]s,<br />
Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-1/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Reflexão Computacional – Exemplo prático</title>
		<link>http://www.javasimples.com.br/core-java/reflexo-computacional-exemplo-prtico</link>
		<comments>http://www.javasimples.com.br/core-java/reflexo-computacional-exemplo-prtico#comments</comments>
		<pubDate>Tue, 09 Feb 2010 00:09:54 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Core Java]]></category>
		<category><![CDATA[computacional]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[pratico]]></category>
		<category><![CDATA[reflexao]]></category>

		<guid isPermaLink="false">http://javasimples.wordpress.com/2010/02/08/reflexo-computacional-exemplo-prtico/</guid>
		<description><![CDATA[E ae galera, Primeiro de tudo, obrigado pelas visitas… estava vendo as estatísticas do site e todo dia tem alguém dando uma olhada no blog. Obrigado mesmo. No último post eu mostrei uma técnica bem interessante da programação dinâmica: a reflexão, através da qual agente consegue perguntar pra um objeto qualquer quais são suas variáveis [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->E ae galera,<br />
Primeiro de tudo, obrigado pelas visitas… estava vendo as estatísticas do site e todo dia tem alguém dando uma olhada no blog. Obrigado mesmo. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a href="http://www.javasimples.com.br/mundo-java/java-e-seus-espelhos-reflexo-computacional/">No último post</a> eu mostrei uma técnica bem interessante da programação dinâmica: a reflexão, através da qual agente consegue perguntar pra um objeto qualquer quais são suas variáveis de instância (inclusive os seus valores) e seus métodos.</p>
<p>Beleza, daí um monte de gente me perguntou: “Pra que diabos eu preciso saber disso?” ou então “Quando eu vou usar?” entre outras… Para exemplificar o uso da reflexão vamos criar uma pequena aplicação. Nada muito complicado… uma agenda de contatos. OK, só mais um detalhe: não vou explicar nada sobre a conexão com o banco de dados, ou tratamento de erros ou outras coisas que vou utilizar no tutorial, o foco vai ser a reflexão. Qualquer dúvida é só deixar um comentário que a gente resolve.</p>
<p><!--:--><span id="more-34"></span><!--:pt--></p>
<p>Então vamos ao que interessa! Primeiro vamos criar uma tabela no banco de dados para representar um contato:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">`contatos`</span> <span style="color: #66cc66;">&#40;</span>
&nbsp;
<span style="color: #ff0000;">`con_id`</span> <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
<span style="color: #ff0000;">`con_nome`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">60</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
<span style="color: #ff0000;">`con_endereco`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">100</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
<span style="color: #ff0000;">`con_email`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">50</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
<span style="color: #ff0000;">`con_telefone`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">20</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">`con_id`</span> <span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#41;</span> ENGINE <span style="color: #66cc66;">=</span> INNODB <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">COLLATE</span> utf8_unicode_ci;</pre></div></div>

<p>Pronto, com o banco pronto vamos para a aplicação. Crie uma nova aplicação no NetBeans (aplicação para área de trabalho, porque ela já importa o .jar do swing), apague tudo que ele crie a seguinte estrutura:</p>
<p><a href="http://javasimples.files.wordpress.com/2010/02/image.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0;" title="image" src="http://javasimples.files.wordpress.com/2010/02/image_thumb.png" border="0" alt="image" width="230" height="203" /></a></p>
<p>Vamos aplicar um pequeno padrão aqui, algo que lembra o MVC, que é utilizar uma estrutura de 3 camadas:</p>
<ol>
<li>Apresentação: mostra os dados para o usuário;</li>
<li>Negócios: cuida das regras de negócio da aplicação (nada muito complexo nessa nossa agenda);</li>
<li>Persistência: cuida do armazenamento físico dos dados.</li>
</ol>
<p>Não vou explicar muito a engenharia da coisa portanto vamos em frente. Vamos começar de baixo pra cima, ou seja, vamos ver primeiro a classe da camada de persistência:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ConexaoMySQL <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Connection</span> connect<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> erro <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> ConexaoMySQL getConexao<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        ConexaoMySQL c <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ConexaoMySQL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Connection</span> connect <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006633;">forName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;com.mysql.jdbc.Driver&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">String</span> url <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;jdbc:mysql://localhost/agenda&quot;</span><span style="color: #339933;">;</span>
            connect <span style="color: #339933;">=</span> <span style="color: #003399;">DriverManager</span>.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span>url, <span style="color: #0000ff;">&quot;root&quot;</span>, <span style="color: #0000ff;">&quot;123&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            c.<span style="color: #006633;">setConnection</span><span style="color: #009900;">&#40;</span>connect<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassNotFoundException</span> cnfex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Falha ao ler o driver JDBC&quot;</span> <span style="color: #339933;">+</span> cnfex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">SQLException</span> sqlex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Impossível conectar com a base de dados&quot;</span> <span style="color: #339933;">+</span> sqlex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Outro erro&quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> c<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> close<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">connect</span>.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>ex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> setErro<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> erro<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">erro</span> <span style="color: #339933;">=</span> erro<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> setConnection<span style="color: #009900;">&#40;</span><span style="color: #003399;">Connection</span> connection<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">connect</span> <span style="color: #339933;">=</span> connection<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Connection</span> getConnection<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">connect</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getMensagemErro<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> erro<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> getEstadoConexao<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>connect <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> manipular<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> sql<span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// inserir, alterar,excluir</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">Statement</span> statement <span style="color: #339933;">=</span> connect.<span style="color: #006633;">createStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> result <span style="color: #339933;">=</span> statement.<span style="color: #006633;">executeUpdate</span><span style="color: #009900;">&#40;</span>sql<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            statement.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>result <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">SQLException</span> sqlex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            erro <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Erro: &quot;</span> <span style="color: #339933;">+</span> sqlex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getMaxPK<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> tabela, <span style="color: #003399;">String</span> chave<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;select max(&quot;</span> <span style="color: #339933;">+</span> chave <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;) as max from &quot;</span> <span style="color: #339933;">+</span> tabela<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> max <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">ResultSet</span> rs <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">Statement</span> statement <span style="color: #339933;">=</span> connect.<span style="color: #006633;">createStatement</span><span style="color: #009900;">&#40;</span>
            <span style="color: #003399;">ResultSet</span>.<span style="color: #006633;">TYPE_SCROLL_INSENSITIVE</span>,
            <span style="color: #003399;">ResultSet</span>.<span style="color: #006633;">CONCUR_READ_ONLY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>sql<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            rs <span style="color: #339933;">=</span> statement.<span style="color: #006633;">executeQuery</span><span style="color: #009900;">&#40;</span>sql<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                max <span style="color: #339933;">=</span> rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;max&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            statement.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">SQLException</span> sqlex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            erro <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Erro: &quot;</span> <span style="color: #339933;">+</span> sqlex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> max<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//aqui que a mágica da reflexão acontece</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> Insere<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> tabela, <span style="color: #003399;">Object</span> objeto<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">SimpleDateFormat</span> sd <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;yyyy-MM-dd&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;INSERT INTO &quot;</span> <span style="color: #339933;">+</span> tabela.<span style="color: #006633;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;(&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//percorre os atributos vendo o nome dos campos</span>
        <span style="color: #000000; font-weight: bold;">Class</span> classe <span style="color: #339933;">=</span> objeto.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Field</span> f <span style="color: #339933;">:</span> classe.<span style="color: #006633;">getDeclaredFields</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            f.<span style="color: #006633;">setAccessible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            sql <span style="color: #339933;">+=</span> f.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        sql <span style="color: #339933;">=</span> sql.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, sql.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//retira a ultima virgula..</span>
        sql <span style="color: #339933;">+=</span> <span style="color: #0000ff;">&quot;) VALUES(&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//percorre os atributos vendo o valor dos campos</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Field</span> f <span style="color: #339933;">:</span> classe.<span style="color: #006633;">getDeclaredFields</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            f.<span style="color: #006633;">setAccessible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">getType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getSimpleName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;String&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                sql <span style="color: #339933;">+=</span> <span style="color: #0000ff;">&quot;'&quot;</span> <span style="color: #339933;">+</span> f.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>objeto<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;',&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                sql <span style="color: #339933;">+=</span> f.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>objeto<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        sql <span style="color: #339933;">=</span> sql.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, sql.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//retira a ultima virgula..</span>
        sql <span style="color: #339933;">+=</span> <span style="color: #0000ff;">&quot;)&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//executa a query</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>sql<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>manipular<span style="color: #009900;">&#40;</span>sql<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#40;</span>getMensagemErro<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O único método que merece explicações é o método <strong>Insere(String tabela, Object objeto)</strong> que utiliza da reflexão computacional para criar dinâmicamente o SQL referente à inserção do objeto “<strong>objeto</strong>” na tabela “<strong>tabela</strong>”.</p>
<p>O código é bem simples de entender:</p>
<ol>
<li>Inicializa a variável responsável por guardar o SQL;</li>
<li>Passa por todos os atributos do objeto adiciondo os nomes deles ao SQL;</li>
<li>Passa pelos atributos novamente, só que desta vez adicionando os valores dos atributos (caso seja uma variável da classe String, adiciona aspas simples antes e depois do valor).</li>
<li>Executa a query. Se algo deu errado, joga uma nova exceção com a mensagem de erro.</li>
</ol>
<p>Muito simples não?!?!?<br />
Vamos ver como funciona na prática então, vamos subir uma camada e ver como funciona a classe Contatos.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Contatos <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> con_id<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> con_nome<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> con_endereco<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> con_telefone<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> con_email<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Contatos<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> con_nome, <span style="color: #003399;">String</span> con_endereco, <span style="color: #003399;">String</span> con_telefone, <span style="color: #003399;">String</span> con_email<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
        ConexaoMySQL c <span style="color: #339933;">=</span> ConexaoMySQL.<span style="color: #006633;">getConexao</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">con_id</span> <span style="color: #339933;">=</span> c.<span style="color: #006633;">getMaxPK</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;contatos&quot;</span>, <span style="color: #0000ff;">&quot;con_id&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        c.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">con_nome</span> <span style="color: #339933;">=</span> con_nome<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">con_endereco</span> <span style="color: #339933;">=</span> con_endereco<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">con_telefone</span> <span style="color: #339933;">=</span> con_telefone<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">con_email</span> <span style="color: #339933;">=</span> con_email<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> Insere<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">con_nome</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">con_telefone</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Preencha pelo menos o nome e o telefone.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        ConexaoMySQL c <span style="color: #339933;">=</span> ConexaoMySQL.<span style="color: #006633;">getConexao</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        c.<span style="color: #006633;">Insere</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;contatos&quot;</span>, <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        c.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//getters e setters</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Uma classe extremamente simples que representa fielmente a tabela que criamos no banco de dados.</p>
<p>O construtor não exige o ID do contato, ao invés disso ele pega um novo para o contato (busca no banco o maior ID existente e soma 1).</p>
<p>O método <strong>Insere()</strong> não faz nada além de validar se pelo menos o nome e o telefone estão preenchidos e chamar o método <strong>Insere(..)</strong> da camada inferior passando uma String com o nome da tabela e passando ele mesmo (o objeto Contato) através da palavra reservada <strong>this</strong>. Caso ocorra algum erro na query, será retornada uma exceção do método <strong>Insere(…)</strong> da classe ConexaoMySQL.java para o método <strong>Insere()</strong> da classe Contato.java e este por sua vez irá retornar essa mesma exceção para quem o chamou.</p>
<p>Os nomes dos atributos devem ser iguais aos nomes das colunas da tabela, pois o método <strong>Insere(..)</strong> da classe ConexaoMySQL.java trata cada atributo como uma coluna da tabela para montar o SQL, como já vimos antes.</p>
<p>Agora vem a última (ou a primeira, depende do ponto de vista.. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) camada: a responsável pela apresentação. A classe Principal.java é um JFrame que vai fornecer a interface visual para o usuário. Deve ficar mais ou menos assim:</p>
<p><a href="http://javasimples.files.wordpress.com/2010/02/image1.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0;" title="image" src="http://javasimples.files.wordpress.com/2010/02/image_thumb1.png" border="0" alt="image" width="356" height="263" /></a></p>
<p>Os campos de texto são JTextFields com os respectivos nomes: jTF_Nome, jTF_Endereco, jTF_Telefone e jTF_Email.</p>
<p>Creio que eu nem precise comentar sobre o que o botão Limpar faz não é?</p>
<p>O código do botão Inserir segue abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> Inserir<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        Contatos c <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Contatos<span style="color: #009900;">&#40;</span>jTF_Nome.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, jTF_Endereco.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, jTF_Telefone.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, jTF_Email.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        c.<span style="color: #006633;">Insere</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Contato adicionado com sucesso&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Cria-se um objeto Contato a partir dos dados do formulário e chama o método Insere(), caso ocorra algum erro, o programa desviará para o bloco catch(…) e será mostrado o erro, mas se der tudo certo, será mostrada a mensagem de sucesso.</p>
<p>DICA: Debuge o projeto para ver como o SQL é montado dinâmicamente. É bem interessante.</p>
<p>É isso! Repare como o código fica simples e fácil de ler.<br />
Ao invés de ter uma classe só que cuida de mostrar os dados, validá-los, tratar a conexão com o banco e tratar o SQL (como eu mesmo já fiz e sei que muita gente faz), agora a gente tem uma estrutura muito bem projetada que facilita a manutenção e futuras mudanças, como por exemplo:</p>
<ol>
<li>Se você quiser guardar o twitter do contato também, basta criar uma nova coluna no banco, um novo atributo na classe Contatos.java e um novo campo de texto na classe de apresentação. Não precisa se preocupar com SQL pois a reflexão cuida disso pra nós.</li>
<li>Se precisar mudar o banco para o SQL Server, basta trocar a classe ConexaoMySQL por uma ConexaoSQLServer. Não há necessidade de alteração na lógica nem na apresentação do projeto.</li>
</ol>
<p>Minha intenção neste post era mostrar um exemplo somente sobre reflexão, mas eu acabei mostrando um pouco sobre o modelo de desenvolvimento em 3 camadas, algo realmente muito útil quando se trata do desenvolvimento de software.</p>
<p>Obrigado a você que teve paciência de ler até aqui.<br />
Quem quiser o projeto do NetBeans, basta pegar <a href="http://www.4shared.com/file/217967250/b8750a7c/ContatosReflexao.html">aqui</a>.<br />
Qualquer dúvida é só deixar um comentário.</p>
<p>[] e até a próxima,<br />
Saab.</p>
<p>PS: Só queria deixar uns créditos a outras pessoas:</p>
<p>Professor Silvio Carro (FIPP) que criou a base para a classe de conexão com o banco. A maior parte do código foi feito por ele.</p>
<p>Professor Emerson Silas Dória (FIPP) que mostrou esses conceitos de reflexão e camadas em aula, o que motivou a criação destes posts.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/core-java/reflexo-computacional-exemplo-prtico/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Adicionando JCalendar e JDateChooser à paleta do Netbeans</title>
		<link>http://www.javasimples.com.br/swing-awt/adicionando-jcalendar-e-jdatechooser-paleta-do-netbeans</link>
		<comments>http://www.javasimples.com.br/swing-awt/adicionando-jcalendar-e-jdatechooser-paleta-do-netbeans#comments</comments>
		<pubDate>Tue, 19 Jan 2010 19:47:00 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[SWING/AWT]]></category>
		<category><![CDATA[jcalendar]]></category>
		<category><![CDATA[jdatechooser]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[paleta]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://javasimples.wordpress.com/2010/01/19/adicionando-jcalendar-e-jdatechooser-paleta-do-netbeans/</guid>
		<description><![CDATA[Se você não conhece esse componente, deveria conhecer! São componentos visuais que facilitam imensamente o usuário selecionar uma data. Segue uma pequena imagem dos componentes: O JCalendar é como o calendário do Windows, já o JDateChooser é como um combobox, que abre um mini-calendário quando o usuário clica no ícone do lado direito e o [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Se você não conhece esse componente, deveria conhecer!</p>
<p>São componentos visuais que facilitam imensamente o usuário selecionar uma data. Segue uma pequena imagem dos componentes:</p>
<p><a href="http://javasimples.files.wordpress.com/2010/01/image.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0;" title="image" src="http://javasimples.files.wordpress.com/2010/01/image_thumb.png" border="0" alt="image" width="277" height="153" /></a></p>
<p>O JCalendar é como o calendário do Windows, já o JDateChooser é como um combobox, que abre um mini-calendário quando o usuário clica no ícone do lado direito e o fecha quando o usuário clica na data desejada.</p>
<p>Site do projeto &#8211; <a href="http://www.toedter.com/en/jcalendar/">http://www.toedter.com/en/jcalendar/</a></p>
<p><!--:--><span id="more-25"></span><!--:pt--></p>
<p>Para instalar esses componentes é necessário fazer o download no site do projeto e procurar dentro da pasta /lib o .jar desejado, mas como eu sou mto bonzinho, eu coloquei no meu 4shared o único arquivo necessário. Para baixar clique <a href="http://www.4shared.com/file/201496889/50989f8d/jcalendar-133.html">aqui</a>.</p>
<p>Antes de configurar, vale lembrar que o Netbeans vai fazer apenas uma referência ao arquivo, ou seja, ele vai usar o que está dentro do arquivo, então se deixar ele na área de trabalho, ou no diretório dos seus downloads, não vai ter como mudar de lugar depois, então vale a pena guardar em um local seguro (tipo: …/Java/jdk/lib).</p>
<p>Com o Netbeans aberto (estou usando o 6.7.1), clique em “Ferramentas &gt; Paleta &gt; Componentes Swing/AWT”. Voce deverá chegar na seguinte tela:</p>
<p><a href="http://javasimples.files.wordpress.com/2010/01/image1.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0;" title="image" src="http://javasimples.files.wordpress.com/2010/01/image_thumb1.png" border="0" alt="image" width="301" height="276" /></a></p>
<p>Clique em “Nova Categoria” e de o nome desejado, algo como Calendário ou Data, sei lá… Se não quiser não precisa, só acho mais organizado deixar separado.</p>
<p>Com a nova categoria criada (ou não), clique em “Adicionar do JAR…” e navegue até o .jar que você acabou de baixar.</p>
<p>Selecione todos os componentes e clique em “Próximo”.</p>
<p><a href="http://javasimples.files.wordpress.com/2010/01/image2.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0;" title="image" src="http://javasimples.files.wordpress.com/2010/01/image_thumb2.png" border="0" alt="image" width="303" height="216" /></a></p>
<p>Na última tela basta selecionar a pasta que vai conter os novos componentes e clicar em “Finalizar”.</p>
<p>Prontinho, agora você já tem a sua disposição o JCalendar, o JDateChooser e mais alguns componentes. Para usar é só clicar e arrastar pra tela. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a href="http://javasimples.files.wordpress.com/2010/01/image3.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0;" title="image" src="http://javasimples.files.wordpress.com/2010/01/image_thumb3.png" border="0" alt="image" width="273" height="300" /></a></p>
<p>Duas coisas que valem ser lembradas:</p>
<ol>
<li>A propriedade dateFormatString é responsável pela formatação da string exibida no componente. Ex:<br />
”dd/MM/yyyy” –&gt; 19/01/2010<br />
”MM/dd/yyyy” –&gt; 01/19/2010</li>
<li>Todos os componentes possuem o método getDate que retorna a data selecionada em um objeto java.util.Date</li>
</ol>
<p>É isso ai galera.<br />
Qualquer dúvida é só comentar…</p>
<p>Até a próxima,<br />
Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/swing-awt/adicionando-jcalendar-e-jdatechooser-paleta-do-netbeans/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

