Ao trabalhar com banco de dados em Java fazemos uso dos drivers JDBC. Estes drivers sao fornecidos pelos desenvolvedores dos bancos de dados e seguem uma implementacao definida pelo Java e realizam, entre diversas responsabilidades, o mapeamento entre a forma que uma informacao e armazenada no banco de dados e os tipos primitivos ou classes em Java, que sao o que efetivamente iremos trabalhar durante nossa codificacao. O principal objetivo do JDBC e a abstracao do sistema de banco de dados, mas esta abstracao nao e totalmente infalivel e algumas praticas devem ser observadas, entre elas o correto mapeamento entre os tipos, nesta postagem vamos realizar uma pequena analise nesta pratica.A abstracao da tipagemUm desenvolvedor, normalmente, nao ira se preocupar em como a sua String "nome da empresa" esta definida no banco de dados, ate por que o banco de dados pode mudar dependendo do cliente, e esta forma de armazenamento normalmente recaira sobre o DBA. Entre estes dois deve existir a documentacao do sistema que ira definir a forma como cada um deve trabalhar, e, para evitar dores de cabeca, entre esta documentacao e recomendavel que existam alguns acordos tecnicos como padrao de nomenclaturas e tipos de armazenamento.Os tipos de dados SQLCada banco de dados possui o seu conjunto proprio de tipos de dados, maior ou menor que os concorrentes, mas a especificacao JDBC define um uso baseado em um conjunto generico de tipos de dados SQL. Nesta postagem iremos analisar este conjunto generico, mas uma analise de mapeamentos mais detalhada de qualquer banco, se necessaria, pode ser encontrado na internet.CHAR, VARCHAR e LONGVARCHAREstes tipos representam textos, com tamanhos variaveis ou nao, e devem ser mapeados para a classe String. Sao manipulados atraves dos metodos ResultSet.getString e PreparedStatement.setString.NUMERIC e DECIMALEstes tipos representam numeros reais com precisao fixa, onde a precisao e importante para os calculos matematicos, arredondamentos ou representacao textual, como, por exemplo, uso monetario ou comparacoes precisas. Devem ser mapeados para a classe java.math.BigDecimal e sao manipulados atraves dos metodos ResultSet.getBigDecimal e PreparedStatement.setBigDecimal.Caso voce nao conheca os problemas comuns encontrados ao trabalhar com os tipos float e double, entenda que estes tipos geram pequenas inconsistencias nas precisoes numericas que podem gerar falhas de logica, inicie sua pesquisa a partir daqui: http://floating-point-gui.de/. BIT e BOOLEANRepresentam valores boolean e devem ser mapeados para a o tipo primitivo boolean ou a classe Boolean. Sao manipulados atraves dos metodos ResultSet.getBoolean e PreparedStatement.setBoolean.Muitos bancos de dados, como o Oracle, nao implementam um tipo como estes. No Oracle uma das recomendacoes e o uso do tipo CHAR com uma constraint de dominio de valores, veja abaixo:ALTER TABLE tabela ADD coluna_boleana CHAR CHECK (coluna_boleana IN (0,1) );Mas como dito antes, o driver JDBC abstrai esta caracteristica e torna transparente para o desenvolvedor.TINYINTRepresentam numeros inteiros de 0 a 255 e devem ser mapeados para o tipo byte. Sao manipulados atraves dos metodos ResultSet.getByte e PreparedStatement.setByte.Este tipo sofre com falta de suporte e e recomendavel preferir o uso do tipo SMALLINT no lugar.SMALLINTRepresentam numeros inteiros de -32768 a 32767 e devem ser mapeados para o tipo short. Sao manipulados