Qual é o tipo de um valor BOOL no SQLite? Quero armazenar na minha tabela valores TRUE / FALSE.
Eu poderia criar uma coluna de INTEGER e armazenar os valores 0 ou 1, mas não será a melhor maneira de implementar o tipo BOOL.
Há algum jeito?
Obrigado.
Respostas:
Não há tipo de dados booleano nativo para SQLite. De acordo com o documento Tipos de dados :
fonte
No SQLite, o melhor que você pode fazer é usar os números inteiros 0 e 1 para representar falso e verdadeiro. Você pode declarar o tipo de coluna assim:
Omita o
NOT NULL
que você deseja permitirNULL
, além de 0 e 1.O uso do nome do tipo
BOOLEAN
aqui é para facilitar a leitura, para o SQLite é apenas um tipo com afinidade NUMÉRICA .Observe que as restrições CHECK são suportadas desde o SQLite 3.3.0 (2006).
Aqui estão alguns exemplos de INSERTs que funcionarão: (observe como seqüências de caracteres e números de ponto flutuante são analisados como números inteiros)
e alguns que falharão:
fonte
Tipo de dados booleano do SQLite : O
SQLite não possui uma classe de armazenamento booleana separada. Em vez disso, os valores booleanos são armazenados como números inteiros 0 (false) e 1 (true).
Você pode converter booleano em int desta maneira:
Você pode converter int novamente em booleano da seguinte maneira:
Se você deseja explorar o sqlite, aqui está um tutorial .
Eu dei uma resposta aqui . Está trabalhando para eles.
fonte
Boolean flag2 = (intValue != 0);
usar o tipo de dados Inteiro com os valores 0 e 1 é o mais rápido.
fonte
Além da resposta de ericwa. As restrições CHECK podem ativar uma coluna pseudo-booleana aplicando um tipo de dados TEXT e permitindo apenas valores específicos de caso TRUE ou FALSE, por exemplo
fonte
Mas, se você deseja armazenar vários deles, pode alterá-los e armazená-los como um int, como as permissões / modos de arquivo unix.
Para o modo 755, por exemplo, cada dígito refere-se a uma classe diferente de usuários: proprietário, grupo, público. Dentro de cada dígito 4 é lido, 2 é gravado, 1 é executado e 7 são todos iguais ao 111 binário. 5 são lidos e executados assim 101. Crie seu próprio esquema de codificação.
Estou apenas escrevendo algo para armazenar dados de programação de TV do Schedules Direct e tenho os campos binários ou sim / não: estéreo, hdtv, novo, ei, legendas ocultas, dolby, sap em espanhol, estréia da temporada. Então, 7 bits ou um número inteiro com no máximo 127. Um caractere realmente.
Um exemplo do que estou trabalhando agora. has () é uma função que retorna 1 se a segunda string estiver na primeira. inp é a string de entrada para esta função. misc é um caracter não assinado inicializado como 0.
Então, eu estou armazenando 7 booleanos em um inteiro com espaço para mais.
fonte
Você pode simplificar as equações acima usando o seguinte:
Se a representação int (sqlInt) do booleano for 0 (false), o booleano (flag) será falso, caso contrário será verdadeiro.
Código conciso é sempre melhor trabalhar com :)
fonte
Outra maneira de fazer isso é uma coluna TEXT. E então converta o valor booleano entre Booleano e String antes / depois de salvar / ler o valor do banco de dados.
Ex. Você tem
"boolValue = true;
"Para sequenciar:
E voltando ao booleano:
fonte