Você está aqui: Java ::: Java + Firebird/Interbase ::: Metadados da Base de Dados (Database Metadata)

Como retornar os tipos de dados suportados pelo Firebird e seus correspondentes JDBC

Quantidade de visualizações: 7477 vezes
Em algumas situações precisamos obter os tipos de dados suportados pelo Firebird e mapeá-los para seus correspondentes JDBC. Esta não é uma tarefa fácil, mas que, com uma pequena ajuda dos recursos de reflexão do Java, pode ser realizada depois de algumas xícaras de café.

O primeiro passo é obter os tipos de dados suportados pelo Firebird com uma chamada ao método getTypeInfo() da interface DatabaseMetaData. Os campos do ResultSet que nos interessam são TYPE_NAME e DATA_TYPE. TYPE_NAME traz o nome do tipo de dados no Firebird enquanto DATA_TYPE traz o tipo JDBC correspondente como um inteiro. Assim, o que temos que fazer é usar reflexão para obter todos os campos da classe java.sql.Types e efetuar um mapeamento entre os tipos.

Veja o código completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos_jdbc;

import java.lang.reflect.Field;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;

public class Main{
  static Map mapa; // usado para mapear os tipos JDBC
  
  public static void main(String[] args) {
    // string de conexão
    String databaseURL =
      "jdbc:firebirdsql:localhost/3050:C:\\Firebird_2_5\\dados\\estudos.fdb";
    String user = "sysdba";
    String password = "masterkey";
    String driverName = "org.firebirdsql.jdbc.FBDriver";

    try {
      Class.forName(driverName).newInstance();
      Connection conn = DriverManager.getConnection(databaseURL, user, password);

      // vamos obter um objeto da classe org.firebirdsql.jdbc.FBDatabaseMetaData
      DatabaseMetaData dbmd = conn.getMetaData();

      // vamos obter os tipos de dados suportados por esta versão do Firebird
      // e seus correspondentes JDBC
      ResultSet tiposDados = dbmd.getTypeInfo();
      while(tiposDados.next()){
        System.out.println("Firebird: " + tiposDados.getString("TYPE_NAME") +
          " - JDBC: " + getJdbcTypeName(Integer.parseInt(tiposDados.getString("DATA_TYPE"))));
      }
      
      // vamos fechar o ResultSet
      tiposDados.close();
    }
    catch (SQLException ex) {
      System.out.println("SQLException: " + ex.getMessage());
      System.out.println("SQLState: " + ex.getSQLState());
      System.out.println("VendorError: " + ex.getErrorCode());
    }
    catch (Exception e) {
      System.out.println("Problemas ao tentar conectar com o banco de dados: " + e);
    }
  }

  // Este método retorna o nome de um tipo JDBC
  // O retorno é null se o tipo JDBC não puder ser reconhecido
  public static String getJdbcTypeName(int jdbcType){
    // vamos usar reflection para mapear valores inteiros a seus nomes
    if(mapa == null) {
      mapa = new HashMap();

      // vamos obter todos os campos da classe java.sql.Types
      Field[] campos = java.sql.Types.class.getFields();
      
      // vamos percorrer os campos
      for(int i = 0; i < campos.length; i++){
        try{
          // vamos obter o nome do campo
          String nome = campos[i].getName();

          // vamos obter o valor do campo
          Integer valor = (Integer)campos[i].get(null);

          // vamos adicionar ao mapa
          mapa.put(valor, nome);
        }
        catch(IllegalAccessException e){
          System.out.println("Ops: " + e.getMessage());
        }
      }
    }

    // vamos retornar o nome do tipo JDBC
    return (String)mapa.get(new Integer(jdbcType));
  }
}

O resultado da execução deste código foi:

Firebird: BIGINT - JDBC: BIGINT
Firebird: BLOB SUB_TYPE 0 - JDBC: LONGVARBINARY
Firebird: BLOB SUB_TYPE 1 - JDBC: LONGVARCHAR
Firebird: CHAR - JDBC: CHAR
Firebird: NUMERIC - JDBC: NUMERIC
Firebird: DECIMAL - JDBC: DECIMAL
Firebird: INTEGER - JDBC: INTEGER
Firebird: SMALLINT - JDBC: SMALLINT
Firebird: FLOAT - JDBC: FLOAT
Firebird: DOUBLE PRECISION - JDBC: DOUBLE
Firebird: VARCHAR - JDBC: VARCHAR
Firebird: DATE - JDBC: DATE
Firebird: TIME - JDBC: TIME
Firebird: TIMESTAMP - JDBC: TIMESTAMP
Firebird: ARRAY - JDBC: OTHER
Firebird: BLOB SUB_TYPE <0 - JDBC: BLOB

Link para compartilhar na Internet ou com seus amigos:

Java ::: Classes e Componentes ::: JTable

Java Swing Avançado - Como exibir imagens nas células de uma JTable em suas aplicações Java Swing

Quantidade de visualizações: 14920 vezes
Nesta dica mostrarei como criar uma classe personalizada que estende a classe JLabel e implementa a interface TableCellRenderer. O objetivo é fornecer esta JLabel ao método setCellRenderer() de uma das colunas da JTable e exibir uma imagem ou foto ao lado do conteúdo da célula.

Veja o resultado da figura abaixo:



E aqui está o código Java Swing completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package arquivodecodigos;

import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
 
public class Estudos extends JFrame{
  public Estudos(){
    super("Exemplo de uma tabela simples");
         
    // colunas da tabela
    String[] colunas = {"Nome", "Idade", "Sexo"};
         
    // conteúdo da tabela   
    Object[][] conteudo = {
        {"Osmar J. Silva", "32", "Masculino"},
        {"Maria Clara Gomes", "19", "Feminino"},
        {"Fernando Gomes", "15", "Masculino"},
        {"Carlos Vieira", "40", "Masculino"}
    };
         
    // constrói a tabela
    JTable tabela = new JTable(conteudo, colunas);
     
    // quero exibir imagens ao lado do texto da primeira coluna
    TableCellRenderer tcr = new Imagem();
    TableColumn column = tabela.getColumnModel().getColumn(0);
    column.setCellRenderer(tcr);
  
    tabela.setPreferredScrollableViewportSize(new Dimension(350, 50));
     
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
             
    JScrollPane scrollPane = new JScrollPane(tabela);
    c.add(scrollPane);
         
    setSize(400, 300);
    setVisible(true);
  }
     
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}
 
class Imagem extends JLabel implements TableCellRenderer{
  public Imagem(){
    setOpaque(true);
  }
   
  public Component getTableCellRendererComponent(JTable table, 
     Object value, boolean isSelected, boolean hasFocus, int row, 
     int column){
     
     Icon imagem = new ImageIcon("C:\\estudos_java\\icon.gif");
     // certifique-se da existencia da imagem "icon.gif" antes de executar
     
     if(isSelected)
       setBackground(table.getSelectionBackground());
     else
       setBackground(table.getBackground());        
      
     setIcon(imagem);
     setText(value.toString());
         
     return this;       
  }
   
  public void validate() {}
  public void revalidate() {}
  protected void firePropertyChange(String propertyName, 
    Object oldValue, Object newValue) {}
  public void firePropertyChange(String propertyName, 
    boolean oldValue, boolean newValue) {}  
}



Java ::: Projetos Java Completos - Códigos Fonte Completos Java ::: Jogos (Games)

Como criar um Jogo da Velha em Java - Jogo completo com código fonte comentado - Versão console

Quantidade de visualizações: 6322 vezes
Faça o download do código-fonte Jogo da Velha em Java

Sobre o Jogo da Velha em Java

O Jogo da Velha, também conhecido como Tic-Tac-Toe, é um dos joguinhos mais fáceis de se programar em Java. Além disso, ele possibilita uma boa oportunidade de se entender matrizes, a estrutura switch, os laços for e while, assim como a estrutura básica presente em praticamente todos os games.

O Jogo da Velha em Java Console

Neste código fonte eu demonstro como o Jogo da Velha pode ser criado em Java usando o modo console, ou seja, em formato texto. Penso que o entendimento da lógica é mais fácil em modo console. Uma vez que você tenha aprendido todos os passos envolvidos, você poderá reproduzí-lo em modo gráfico sem muitas dificuldades.

A versão do jogo apresentado nesta dica é um jogador humano, ou seja, você, contra o computador. Não coloquei inteligência artificial nem aprendizado de máquina nos movimentos do computador. Usei apenas jogadas sorteadas. Fica como desafio você implementar jogadas inteligentes por parte do computador como forma de deixar o jogo ainda mais interessante. Por enquanto o objetivo é só o aprendizado mesmo.

Antes de continuarmos, veja uma imagem demonstrando o jogo:



Me mostra um pouco do código

Para mostrar a simplicidade do código, veja o método que registra a jogada do jogador humano:

// este método registra a jogada do jogador humano
private static void jogadaHumano(char[][] tabuleiro) {
  int jogada; // para registrar a jogada do jogador humano
	
  // repete até que a jogada seja válida
  while (true) {
    // lê a jogada do humano
    System.out.print("\nSua jogada (1 a 9): ");
    jogada = Integer.parseInt(entrada.nextLine());
    // este movimento é válido?
    if (movimentoValido(tabuleiro, jogada)){
      break;
    } 
    else{ // não é válido
      System.out.println("O número " + jogada + " não é um movimento válido.");
    }  
  }
 
  // vamos registrar esse movimento 
  registrarMovimento(tabuleiro, jogada, 'X');
}
Como posso obter este código fonte?

Os links para você baixar todas as versões deste projeto estão abaixo:

1) JOGOVELHAJC - Jogo da Velha em Java Console - NetBeans IDE - Faça o Download.

Não se esqueça: Uma boa forma de estudar o código é fazendo pequenas alterações e rodando para ver os resultados. Outra opção é começar um projeto Java do zero e ir adicionando trechos do código fonte para melhor entendimento de suas partes.


Java ::: Dicas & Truques ::: Strings e Caracteres

Como testar a existência de um caractere em uma string e retornar sua posição em Java usando o método indexOf() da classe String

Quantidade de visualizações: 115 vezes
Nesta dica eu mostro como podemos usar o método indexOf() da classe String para pesquisar um caractere em uma palavra, frase ou texto e retornar a sua posição, ou seja, o seu índice dentro da string.

Se o caractere for encontrado, sua posição é retornada. Caso contrário o valor -1 é retornado.

Veja o código completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

public class Estudos{
  public static void main(String[] args){
    // vamos criar uma string
    String frase = "Gosto de programar em Java";
    
    // vamos testas se a string contém a letra "k"
    int pos = frase.indexOf('k');
    
    if(pos < 0){
      System.out.println("A string não contém a letra k");
    }
    else{
      System.out.println("A letra k foi encontrada na posicao: " + pos);
    }
     
    // fecha o programa
    System.exit(0);
  }
} 

Ao executar este código Java nós teremos o seguinte resultado:

A string não contém a letra k


Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 24 usuários muito felizes estudando em nosso site.