Estou todos os dados necessarios no banco como Strings. No caso, do banco, elas estão salvas como VARCHAR. Na hora de recuperar os dados, preciso transformar alguns em ints e floats. O problema, é que talvez o usuário digite valores com virgulas ao invéz de pontos. Estou pensando em varrer a string e substituir as virgulas por pontos. Como fazer? Alguma saida melhor ?
O correto é sempre armazenar números como números, datas como datas e outras coisas como strings. Aí você, para começar, economiza espaço e pode fazer condições nas suas queries que dependam de valores. Fica difícil você fazer uma condição “WHERE x < 100” onde x na verdade contém um valor String que talvez seja “1.000” (e o que é isso afinal? um ou mil?)
E
evefuji
Sem falar que o banco de dados fica extremamente lento quando usamos texto para tudo, incluindo chaves primárias.
Um índice clusterizado, por exemplo, não tem boa eficiencia em um campo varchar, imagine as chaves primárias, estrangeiras, cruzamentos entre tabelas…
Mas se você tem que continuar dessa forma (não sei qual é o seu ambiente, nem sei o que realmente precisa que o banco faça), você pode usar o replace que todo banco tem, normalmente a sintaxe é “Replace(varchar com o valor, varchar com a string a ser procurada, varchar com a string que sobrescreverá a string procurada)”
ViniGodoy
O único lugar que dados viram texto é na interface gráfica, quando vc estiver formatando para exibi-lo para seu usuário. Nem no banco, nem nas classes de negócio, nem nos testes unitários você deveria lidar usar textos para representar outras coisas. Não só você vai consumir muito mais memória (o número [telefone removido] ocupa 32 bits como um int, e 1280 bits como texto), como vai ser obrigado a converter coisas o tempo todo, o que é um desperdício de processamento e um trabalho adicional para você no código.
AndreMendes
Mas no caso de eu determinar que um campo possui um valor float e o usuario digitar 1000,5 ao invéz de 1000.5 ?
E
evefuji
AndreMendes:
Mas no caso de eu determinar que um campo possui um valor float e o usuario digitar 1000,5 ao invéz de 1000.5 ?
Acho que você está confundindo um pouco as coisas, como ViniGodoy disse, número é texto somente na interface com o usuário.
Se ele digita 1000,5, ele está digitando na interface e você deveria tratar antes de inserir no banco. Por exemplo, quando você pega os dados de uma caixa de texto (um JTextField, input, etc…) você tem que tratar na camada de “View”, antes de mandar ao “Model”.
Não é incomum colocar uma máscara de edição para o usuário digitar somente o formato que pede (Exemplo: “###,##0.##”). Mas no Brasil, como o “.” é separador de milhar e o “,” de decimal, melhor inverter esses separadores. (normalmente o componente já converte para você em um número)