Desenvolvedor e Analista de Sistemas | IFPA

quarta-feira, 15 de julho de 2015

JTable com alturas de linhas de acordo como tamanho do texto/conteúdo | JAVA

com 7 Comentários
Configurando a linha da JTable para ficar semelhante a quebra de texto do EXCEL, aumentando o tamanho da linha de acordo com o tamanho do texto:

Exemplo de Tabela 


  1. public class TextAreaCellRenderer extends JTextArea implements TableCellRenderer {  
  2.   
  3.         public TextAreaCellRenderer() {  
  4.   
  5.             setLineWrap(true);  
  6.             setWrapStyleWord(true);  
  7.             setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N  
  8.             setMargin(new java.awt.Insets(5, 5, 5, 5));  
  9.         }  
  10.   
  11.         @Override  
  12.         public Component getTableCellRendererComponent(  
  13.                 JTable table, Object value, boolean isSelected, boolean hasFocus, introw, int column) {  
  14.   
  15.             // set color & border here                
  16.             this.setText(value.toString());  
  17.   
  18.             setText((value == null) ? "" : value.toString());  
  19.             setSize(table.getColumnModel().getColumn(column).getWidth(),  
  20.                     getPreferredSize().height);  
  21.   
  22.             if (table.getRowHeight(row) < getPreferredSize().height) {  
  23.                 table.setRowHeight(row, getPreferredSize().height );  
  24.             }  
  25.   
  26.             return this;  
  27.         }  
  28.     }  

Para adicionar na tabela utilize o seguinte código:
  1. for (int i = 0; i < jTable.getColumnCount(); i++) {  
  2.             col = jTable.getColumnModel().getColumn(i);  
  3.             col.setCellRenderer(new TextAreaCellRenderer());  
  4.         }  

Mais informações »

terça-feira, 14 de julho de 2015

Importar banco de dados no MySQL pelo prompt do DOS

com 0 Comentário
Uma das coisas que me deixa mais tranqüilo para programar é criar um ambiente de testes na minha própria máquina ou em um servidor local.
Com essa prática não temos o risco de causar problemas nos sites que os usuários finais utilizam.
Para copiar os arquivos que estão sendo utilizado online basta utilizar um programa de FTP, porém para copiarmos os dados de um banco de dados precisamos fazer o back-up e então importar esse arquivo. Gosto muito da praticidade do phpMyAdmin, além dele ser amplamente utilizado nos painéis de gerenciamento (CPanel, Plesk etc).
Um grande problema é quando precisamos importar arquivos muito grandes, o que demanda maior processamento e as vezes acaba demorando mais do que nossa paciência agüenta! Por isso gostaria de compartilhar uma prática que utilizo nesses casos.
Ao invés de importar diretamente pelo phpMyAdmin, faço a importação via command prompt do Windows (isso mesmo DOS).
Vou listar os passos para essa operação de importação do banco de dados via prompt de comando do Windows.
Utilizo na minha máquina Windows XP com o XAMPP, conforme instalação no post sobre servidores (veja aqui).
1) Iniciar > Executar > cmd
Isso server para abrir o terminal. Outro modo é abrir o programa diretamente pelo seu executável, o caminho dele normalmente é c:\WINDOWS\system32\cmd.exe
2) Digite o comando: c:\xampp\mysql\bin
Isso vai te levar para o diretório local de instalação do MySQL.
3) Digite o comando: mysql -u root -p
Isso vai iniciar o MySQL, a seguir você deve digitar a senha de administrador (root) do banco de dados.
4) Se estiver tudo correto vai aparecer no prompt algo assim: mysql>
Dentro do prompt você pode utilizar os mesmos comandos que utiliza na programação, como por exemplo:show databases;
Uma dica valiosa é o comando para alteração do charset, muitas vezes você vai importar o SQL e a acentuação ficará com problemas para resolver essa questão utilize o comando: mysql> charset utf8;
Para concluir a importação você precisa selecionar o banco de dados desejado e dar o comando para importação, são os seguintes:
mysql> use nomedo_db;
mysql> source d:/nomedoarquivo_db.sql;
Com essas operações você consegue importar um arquivo grande em poucos segundos. Importante lembrar que você utilize a opção DROP TABLE quando for fazer a exportação, assim as tabelas ficarão exatamente ao que está online.
Mais informações »

terça-feira, 23 de junho de 2015

Como remover/excluir os drivers da impressora no Windows 7, 8, 8.1 e Windows Server 2008

com 0 Comentário
Use o seguinte comando para abrir o gerenciador de drivers de impressoras (printer) no Windows 7 / 8, 8.1 e Windows server 2008.

Digite/execute: printui /s /t2

Pronto, abrirá uma janela com os drivers instalados... selecione remova ;)

Mais informações »

domingo, 14 de junho de 2015

Consultar tamanho de string no bando de dados MySQL

com 0 Comentário

Existem várias funções no MySQL para extrair texto, trabalhar posicionamento, calcular tamanho entre outras. Neste post vou demonstrar como utilizar a funlção LENGTH().
A função LENGTH() no MySQL retorna o tamanho de uma string em bytes. A função pode ser substituida pela função CHAR_LENGTH() se quiser contar o número de caracteres em vez de bytes. Note que CHAR_LENGTH irá tratar uma string de dois bytes como um único caracter.
SELECT LENGTH('teste');
Isto retorna 5.
Para trabalhar o comprimento máximo de uma determinada coluna combine as funções LENGTH() e MAX().
SELECT MAX(LENGTH(minha_coluna)) FROM minha_tabela;
Onde “minha_coluna” é o campo que você quer saber a largura máxima. Isto pode ser útil se você carregar dados de um código externo e quer assegurar-se de que tem espaço suficiente para armazenar os dados.
A query seguinte, retorna quantos caracteres tem o campo ‘cidade’ e quantos registros tem para essa quantidade.
SELECT
   LENGTH(cidade),
   COUNT(*) 
FROM cidade
GROUP BY LENGTH(cidade);
Você pode querer ordenar pela quantidade de registros ou pela quantidade de caracteres da seguinte maneira:
SELECT
   LENGTH(cidade),
   COUNT(*) 
FROM cidade
GROUP BY LENGTH(cidade)
ORDER BY COUNT(*) DESC
ou
SELECT
   LENGTH(cidade),
   COUNT(*) 
FROM cidade
GROUP BY LENGTH(cidade)
ORDER BY LENGTH(cidade) DESC
Mais informações »

domingo, 24 de maio de 2015

Como passar a consulta dinamicamente para o JasperReports / iReport

com 0 Comentário
Defina um parâmetro do tipo String que receberá a consulta vinda da aplicação java:


Parâmetros do Relatório

Observe que temos dois parâmetros definidos por mim: Filtro – servirá para receber uma descrição textual do filtro que o usuário aplicou na geração do relatório e consulta – receberá a consulta a ser executada no banco de dados pelo JasperReports.
Configurar a consulta do relatório como sendo o parâmetro recebido:



Consulta do Relatório


A consulta do relatório será exatamento o parâmetro consulta. Observe o símbolo de exclamação depois da letra P. Sem ele o iReport dá erro no momento de efetuar a compilação do relatório.
Passar a consulta para o relatório através da aplicação Java:

  1. private String geraRelatorioEmPdfConsulta(String consulta, String jasper, String nomeRelatorio) {  
  2.     // Seto a variável saida como nulo  
  3.     saida = null;  
  4.   
  5.     try {  
  6.         JasperPrint print = JasperFillManager.fillReport(jasper, getMapComFiltroEConsulta(filtroAplicado, consulta), getNovaConexao());  
  7.         saida = RelatorioUtil.getDiretorioReal("/relatorios/relatorio.pdf");  
  8.         JasperExportManager.exportReportToPdfFile(print, saida);  
  9.         saida = RelatorioUtil.getContextPath() + "/relatorios/relatorio.pdf";  
  10.     } catch (Exception e) {  
  11.         addErrorMessage("Formulario", "erro.geracao.relatorio", nomeRelatorio);  
  12.         e.printStackTrace();  
  13.     } finally {  
  14.         fechaConexao();  
  15.     }  
  16.   
  17.     // mostro o erro ou o relatório na janela que abre  
  18.     return "geraRelatorio";  
  19. }  
  20.   
  21. /* 
  22. * Esse método retorna o map com o filtro e a consulta que o usuário gerou. 
  23. */  
  24. public Map<String, String> getMapComFiltroEConsulta(String filtroAplicado, String consulta) {  
  25.     Map<String, String> map = new HashMap<String, String>();  
  26.   
  27.     // Se o usuário não aplicou nada no filtro, retorno nulo para o relatório  
  28.     if (filtroAplicado == null)  
  29.         filtroAplicado = "";  
  30.     else  
  31.         filtroAplicado = "Você aplicou o seguinte filtro no relatório:\n" + filtroAplicado;  
  32.   
  33.     map.put("Filtro", filtroAplicado);  
  34.     map.put("consulta", consulta);  
  35.   
  36.     return map;  
  37. } 

Observe, pelo código acima, que eu passo a consulta e o filtro que foram gerados para o relatório dentro de um HashMap, como o JasperReports exige. No final, o relatório com um campo do filtro fornecido ficou assim.

Relatório Gerado

O campo marcado em vermelho foi o filtro aplicado pelo usuário que eu mandei para o relatório como um parâmetro chamado Filtro e que na verdade é apenas uma descrição textual.

Obs.: cada coluna retornada pela minha consulta deve ter o mesmo nome do field no relatório. Caso isso não ocorra, haverá um erro na geração.
Mais informações »

domingo, 17 de maio de 2015

Artigo - Diferença entre java.sql.Time, java.sql.Timestamp e java.sql.Date | JAVA

com 0 Comentário
Neste artigo iremos mostrar as principais diferenças entre  java.sql.Time, java.sql.Timestamp e java.sql.Date. Vale a pena conferir:

Primeiro 

Diferença em java.sql.Time, java.sql.Timestamp e java.sql.Date é sobre a informação que eles representam:
JDBC TIME ou java.sql.Time representam apenas informações de tempo por exemplo, horas , minutos e segundos , sem qualquer informação da data .
JDBC DATA ou java.sql.Date representam apenas informações atualizadas por exemplo ano , mês e dia , sem qualquer informação de tempo .
JDBC TIMESTAMP ou java.sql.Timestamp selo representam tanto informações de data e hora , incluindo detalhes nanossegundos.

Segundo

O java.sql.Time e java.sql.Timestamp selo estende java.util.Date classe, mas java.sql.Date é independente.

Terceiro

As informações de Tempo do java.sql.Date e Data informações de java.sql.Time é normalizada e pode definir a zero, a fim de confirmar ANSI SQL DATA e HORA tipos.


Então diferença entre Time, Timestamp e Data de pacote SQL é clara em termos do que eles representam. Em contrário java.util.Date também representam informações de data e hora, mas sem detalhes nanossegundos e é por isso que muitas pessoas preferem data store contanto valor (milissegundo passou da época 01 de janeiro de 1970 00: 00: 00.000 GMT). Se você comparar a java.sql.Time selo com método equals () retornará false como valor de nanossegundo é desconhecida.

Isso é tudo na diferença entre java.sql.Date , java.sql.Time e java.sql.Timestamp. Todas as diferenças encontra-se sobre o que exatamente a representar. Este tipo de questões valem a pena olhar antes de ir para qualquer entrevista JDBC como hora e data são parte integrante de qualquer entrevista JDBC

Leia mais em: http://javarevisited.blogspot.com/2012/10/difference-between-javasqltime-date-timestamp-jdbc-interview-question.html#ixzz3aQZNZ5pw
Mais informações »

Tutorial - JTable com seleção única | JAVA

com 0 Comentário

Nesse tutorial iremos mostrar como fazer a seleção de uma JTable, de forma única, ou seja, apenas uma seleção. É um método simples, mas que faz muita diferença. Confira no exemplo do código JAVA abaixo:

  1. jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  //seleção única

Para mais informações, não esqueça de dá uma olhada na API do JAVA
https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html
Mais informações »

Tutorial - Break e Continue | JAVA

com 0 Comentário
Break e Continue são dois comandos de controle de estruturas largamente utilizados em loops (repetições) como for e while.

Break

O comando break serve para determinar uma quebra de estrutura, ou seja, ele faz com que, por exemplo, um loop (repetição) pare. No comando switch, por exemplo, ele determina que não pode ser executado o case seguinte, e assim por diante.

No exemplo abaixo, temos uma repetição que se inicia em 1 e deve terminar em mil (1.000), mas dentro desta estrutura há uma condição: se a variável for igual a 10 saia da estrutura de repetição. Vejamos:

  1. public class ExemploBreak {  
  2.   
  3.         public static void main(String args[]) {  
  4.             for (int contador = 1; contador <= 1000; contador++) {  
  5.                 System.out.println("Esta é a repetição nr: " + contador);  
  6.                 if (contador == 10) {  
  7.                     break;  
  8.                 }  
  9.             }  
  10.         }  
  11.     }  

Como podemos observar, mesmo a estrutura de repetição for determinando que a repetição deve ir até 1000, ao executarmos esse código, apenas conseguimos chegar até a repetição número 10. Isso ocorre porque quando if for verdadeiro ele executa o break. Dessa forma, conseguimos sair do loop sem ele ter terminado.

Continue

Continue também é muito utilizado em estruturas e repetição e sua função é ignorar o código, e não sair como acontece com o break.

Exemplificando, faremos um código contendo uma estrutura de repetição que irá contar de 1 a 100, mas sempre que o número não for múltiplo de 5 o código para apresentar o número na tela será ignorado e a repetição continuará com o número seguinte.

  1. public class ExemploContinue {  
  2.   
  3.         public static void main(String args[]) {  
  4.   
  5.             for (int contador = 1; contador <= 100; contador++) {  
  6.   
  7.                 if (contador % 5 != 0) {  
  8.                     continue;  
  9.                 }  
  10.                 /* Se o contador não for múltiplo de 5 
  11.                  * Todo o código abaixo será ignorado 
  12.                  * e o loop continua com o próximo nr */  
  13.                 System.out.println("Contador: " + contador);  
  14.             }  
  15.         }  
  16.     } 

Ou seja, desta forma, apenas os múltiplos de 5 entre 1 e 100 aparecem na tela.
Mais informações »

Total de visualizações