domingo, 16 de setembro de 2012

Prepared statements em Stored Procedures - Mysql

Hoje vou mostrar como é simples usar Prepared statements em Stored procedures.
Prepared Statements são instruções pré compiladas, que possibilita executar uma instrução mais de uma vez de modo eficiente, pois a instrução é analisada apenas uma vez.  Assim como só vai haver dinamismo no envio dos dados por parâmetros, o tráfego da rede é reduzido! detalhes aqui!

Sintaxe SQL para instruções preparadas é baseada em três instruções :

PREPARE prepara um comando para execução.
EXECUTE executa uma declaração preparada.
DEALLOCATE PREPARE libera uma declaração preparada.


Agora, como já dizia o Coronel Jesuíno: "mysql abra ai que vou lhe usar!" 


DELIMITER ;;
    CREATE PROCEDURE sp_Posts(IN idPost TEXT)
BEGIN


SET @queryDelete = CONCAT('DELETE FROM posts WHERE posts.id IN (', idPost,')');
PREPARE pstm FROM @queryDelete;
EXECUTE pstm ;
DEALLOCATE PREPARE pstm ;
END
;;
 
e para executar: 

CALL sp_Posts('5,8,9,32,45,100,165,200');
 

quarta-feira, 5 de setembro de 2012

Waze : app comunitário de trânsito e navegação

Dica de app interessante para Android e Iphone:
Waze é um aplicativo comunitário de trânsito e navegação, usado por mais de 20 milhões de pessoas,
que estão unindo forças com outros motoristas próximos para usufruir de um trânsito mais inteligente,
economizar tempo e melhorar a jornada diária de todos.




segunda-feira, 3 de setembro de 2012

Filtrando linhas da JTable com TableRowSorter

Olá negada!

Nesse post vou mostrar como filtrar as linhas de uma JTable utilizando o TableRowSorter. Como exemplo, criei um model com duas colunas e algumas linhas para a minha JTable. OBS: Utilizei o DefaultTableModel para economizar codigo, mas não use-o
em seus projetos, pois é uma bosta deixa o código muito confuso e difícil de manter (veja mais motivos) ou seja Crie o seu próprio TableModel!

Agora vamos ao FOCO!
Partindo do ponto que você ja tenha um JTexfield e sua JTable com um model com algumas linhas, declare um TableRowSorter<TableModel> e um metodo setRowSorter() que servirá para add o rowSorter a tabela.
No corpo do método será instanciado o TableRowSorter passando o model da JTable (table.getModel()) no seu construtor. Na linha seguinte basta setar ao seu JTable a intancia do RowSorter table.setRowSorter(rowSorter);

Feito isso, set a interface CaretListener que vai disparar o método caretUpdate(CaretEvent arg0) quando a posição do cursor for atualizada. Dentro desse método vem a mágica da classe RowFilter ,
que filtra a JTable, permitindo exibir apenas as linhas que contêm uma coluna com uma sequência específica.

rowSorter.setRowFilter(RowFilter.regexFilter(txtField.getText(), 0));

Abaixo segue o exemplo completo: Minha IDE preferida, se ajeite ai que vou lhe usar!!

Run As Java Application!


Exemplo feito com o código abaixo!

 
import java.awt.Color;
import java.awt.HeadlessException;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.border.LineBorder;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
 * @author Everton Vieira
 * */
public class FiltroJTable extends JFrame {

 private JTextField textField;
 private JTable table;
 private TableRowSorter<TableModel> rowSorter;

 public FiltroJTable() throws HeadlessException {
  getContentPane().setLayout(null);

  JLabel lblRefinarPesquisa = new JLabel("Refinar Pesquisa:");
  lblRefinarPesquisa.setBounds(10, 11, 123, 14);
  getContentPane().add(lblRefinarPesquisa);

  textField = new JTextField();
  //
  textField.addCaretListener(new CaretListener() {
   public void caretUpdate(CaretEvent arg0) {
    String text = textField.getText().trim();
    rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" +text, 0));
   }
  });
  textField.setBounds(127, 8, 205, 20);
  getContentPane().add(textField);
  textField.setColumns(10);

  table = new JTable();
  table.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {
    { "ReceitasTecnologicas.blogspot.com", null },
    { "profdouglas.blogspot.com", null, }, { "cc", null, },
    { "jovemnerd.ig.com.br", null, null, null }, { "ee", null },
    { "naosalvo.com.br", null, null, null }, { "ax", null } },
    new String[] { "Blog", "Title 2", }));
  table.getColumnModel().getColumn(0).setPreferredWidth(240);

  JScrollPane scrollPane = new JScrollPane();
  scrollPane.setBounds(10, 40, 382, 200);
  scrollPane.setViewportBorder(new LineBorder(new Color(0, 0, 0)));
  getContentPane().add(scrollPane);
  table.setFillsViewportHeight(true);
  table.setBounds(20, 245, 351, -208);
  scrollPane.setViewportView(table);
  setRowSorter();
 }

 /**
  * add o TableRowSorter ao minha JTable
  * 
  * @author Everton Vieira
  */
 private void setRowSorter() {
  if (rowSorter == null) {
   rowSorter = new TableRowSorter<TableModel>(table.getModel());
   table.setRowSorter(rowSorter);
  }
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  new FiltroJTable().setVisible(true);

 }
}

Se você leu até aqui ou já consultou o javaDoc não vai me perguntar o motivo de que:
 - quando filtra e tenta imprimir o getValueAt da sua JTable não obtém o valor correto.
 Pois você já sacou que quando usar rowSorter você terá que converter o index da linha desejada usando convertRowIndexToView ou convertRowIndexToModel.
System.out.println(table.getModel().getValueAt(table.convertRowIndexToModel(selectedRow), 0));

Abs do Coronel Jesuíno!

sexta-feira, 31 de agosto de 2012

CASE em SQL

Neste post irei mostrar um recurso pouco conhecido e que não é visto na faculdade (pelo menos eu não vi), que é o usos do CASE em SQL.
A utilização do CASE em comandos SQL funciona semelhante ao 'if' das liguagens de programação.
Sintaxe:
'CASE' Expressão Avaliada

'WHEN' Expressão a ser comparada

'THEN' Expressão Resultante (caso a comparação seja avaliada como TRUE)

'ELSE' Expressão Resultante (caso nenhuma comparação seja avaliada como TRUE)

'END'

Como exemplo, podemos imaginar uma situação em que desejamos saber qual o maior publico entre os times Pernambucanos (Santa Cruz, Sport e Nautico ).
 SELECT mediaPublico,
       CASE
         WHEN mediaPublico>= 12000
              AND mediaPublico< 20000 THEN
         'Vice maior Torcida de PE - IXPORTÊ'
         WHEN mediaPublico>= 20000 THEN
         'A MAIOR TORCIDA DO NORTE/ NORDESTE - TRI-TRI-TRI- TRICOLOR SANTA!!!'
         WHEN mediaPublico< 12000 THEN
         'Torcida do Nauticu,cabe dentro de um fusquinha'
       end AS Maior_Torcida
FROM   torcida 

O CASE também pode ser usada em qualquer instrução ou cláusula que permita uma expressão válida como UPDATE, DELETE,
usando também a cláusula WHERE.

Receita de Salsicha em Conserva - Sausage Rocker

Eita! Hoje é sexta feira,que 'MARAVILHAS'! e como hoje e amanha são dias sagrados para quem gostar de tomar umas cervejas, vou ensinar a fazer um tira gosto matador! A velha Salsicha em Conserva, a qual eu batizo de Sausage Rocker!
Essa receita também serve para batatas

Itensbacklog - Ingredientes:
  • 1kg Salsicha pequena (se não encontrar usa a comum)
  • 1lt Vinagre
  • 1 Cebola
  • Coentro
  • Cebolinha
  • 3 Cabeças de alho
  • 2 Folhas de Louro
  • Cuminho  
  • Pimenta do reino agosto
  • Sal a Gosto
  • Orégano 
Modo de Preparo:
Sprint 1 - Fervendo a Salsicha
Coloque as salsichas em uma panela, adicione água, espere levantar fervura e deixe ferver por 5 minutos, escorra e espere esfriar. 
Sprint 2 - Compilando o Tempero
 Separe alguns galhos de coentro, e pique a Cebola, a cebolinha e as cabeças de alho.

Sprint 3 - Montando o Recipiente
 Após as salsichas esfriarem, em um Recipiente de vidro com tampa você pode ir adicionando os temperos (louro,orégano,cuminho+pimenta do reino,sal) a gosto, as salsichas e
pequenos galhos de coentro e a cebolinha e alho picados. 


Use o seu lado feminino design para ornamentar o recipiente com as salsichas e coentro. 
  
Agora preencha o pote com vinagre... e quando estiver faltando uns 2 ou 3 dedos para encher o recipiente, complete com água filtrada

Sprint 4 - Cevar
 Feche o recipiente e agite(Balance, saculeje), para espalhar o tempero.
Agora sossegue e espere  uma ou duas semanas para tomar uma com a salsicha!

  

Obs: Consumir a Salsicha com alguma bebida alcoólica não faz mal! O que faz mal é engolir o que a globo tenta te empurrar de guela abaixo!

FITec - Vagas de estágio em design de interação

A FITec – Fundação Para Inovações Tecnológicas - comunica aos interessados que estão abertas vagas de estágio em design de interação. Abaixo detalhes sobre as vagas:

Requisitos:
                - Habilidade para compreender as necessidades do usuário e produzir conceitos, soluções e designs de interface do usuário;

                - Domínio de ferramentas de design como Photoshop, Illustrator, Fireworks e Dreamweaver;

                - Desejável: conhecimento em linguagens front-end para Web, como HTML, CSS e JavaScript.

Informações sobre a vaga:

                - O projeto envolve a pesquisa, prototipação e criação da identidade visual de softwares que serão desenvolvidos pela FITec;

                - Carga horária: 6h.
              
Os interessados devem enviar e-mail para o endereço efreitas@fitec.org.br .   O assunto do e-mail deve ser "Estágio Design de Interação"

quinta-feira, 30 de agosto de 2012

RESTful Web Services PHP com Respect / Rest

A construção de WebServices RESTful está surgindo como uma alternativa para a integração de sistemas independente de plataforma.  Além de ser mais simples e leve que o SOAP,  possui a capacidade de transmitir dados diretamente através de HTTP.
Nesse post não pretendo explicar o que é, e todos os princípios da arquitetura REST Transferência de Estado Representacional (Representational State Transfer), e quem não conhece e estiver a fim de aprender... esta disponível a própria tese do Roy Fielding sobre o tema, e uma artigo Wikipédia.

O RESTful foca em URIs e nos detalhes do protocolo HTTP para se beneficiar de seus recursos, sem a necessidade de passar a ação implicitamente na URL ex: Para que eu vou implicitar a ação Edit na minha url http://meusite/usuario/666/edit , se  com o recursos do HTTP posso fazer assim: PUT  http//meusite.com/usuario/666.
 Assim como no Java existe JERSEY que é a implementação de referencia do JAX-RS (API RESTful web Service) , no PHP existe a simples e direta Respect / Rest  disponível aqui no github.

Agora vamos faze de forma rápida e simples um exemplos do Respect\Rest  usando os métodos HTTP (GET,POST,PUT,DELETE) para construir uma app RESTFul.

require_once 'bootstrap.php';
require_once 'Respect/Rest/Router.php';
require_once 'Respect/Rest/Request.php';

use Respect\Rest\


Router;
$router = new Router('/index.php/');
/**
 * get
 * 
 */
$router->get('/meusite/app/login/*/*', function($login, $senha) {
            if ($login == "rectec" && $senha == "123") {
                return "Usuario=> $login Senha: " . md5($senha);
            } else {
                return "Você não existe!!!";
            }
        });

$router->get('/meusite/usuarios', function() {
    return 'Listagem de usuarios';
})->accept(
    array(
        'text/html' => function($data) {
            return 'usuarios em HTML';
        },
        'application/json' => function($data) {
            return 'usuarios em JSON';
        }
    )
);
/**
 * post
 * 
 */
$router->post('/meusite/usuario/', function() {
            
            $data_back = json_decode(file_get_contents('php://input'));
            
            return 'Cadastrando: ' . json_encode($data_back);
        });

/**
 * Alterar
 * 
 */
$router->put('/meusite/usuario/*', function($id = null) {
            return 'Alterando: ' . $id;
        });
/**
 * Deletar
 * 
 */
$router->delete('/meusite/usuario/*', function($id = null) {
            return 'Deletando: ' . $id;
        });
Caso queira representar a saída com HTML, JSON, XML, JPG, etc,  use o Cabeçalho Accept! Para testar vc pode usar um debug para RESTful web service chamado RESTClient no seu FireFox!