11
votes

Déterminez le type de données d'une colonne dans SQLite

Je travaille sur une application Android où l'utilisateur dispose d'options différentes pour trier les données affichées provenant de la base de données. Actuellement, ma chaîne de commande que je passe à la méthode des requêtes Androides () ressemble à ceci: xxx

Le problème avec ceci est que si le type de données dans la colonne spécifiée par colonneName est entier, appeler plus bas ( ) On lui fera trier l'alphabétiquement, c'est-à-dire basé uniquement sur le chiffre le plus à gauche, lequel bien sûr n'a aucun sens pour les données numériques. Par conséquent, je veux seulement appliquer plus bas () si le type de données de la colonne n'est pas entier. Ce que j'ai à l'esprit est une déclaration comme celle-ci: xxx

la pièce entre les crochets est ce que je ne sais pas comment faire. SQLite fournit-il une fonction pour déterminer le type de données d'une colonne?


0 commentaires

5 Réponses :


0
votes

Avez-vous déclaré la colonne comme un entier lors de la mise en place de la table? Sinon, SQLite le stockera sous forme de texte et les sortes agiront comme vous l'avez décrite.

create table if not exists exampletable (columnName integer);


1 commentaires

Oui, j'ai déclaré les colonnes numériques comme entier. Et si je retire l'appel à Basse (), les colonnes entier sont triées comme désirées. Mais bien sûr, l'appel inférieur () est là pour une raison car c'est comme si je veux que les colonnes de texte soient triées.



10
votes

Utilisation: xxx

pour obtenir des informations de table.


0 commentaires

15
votes

Voulez-vous vraiment que le type de la colonne ou du type de la valeur ? ( SQLite est dactylographié de manière dynamique , de sorte que la distinction est importante.)

Si vous voulez ce dernier, vous pouvez utiliser typeof (colleName) .


3 commentaires

Dans mon cas, ce n'est pas vraiment important. Le type des valeurs doit correspondre au type de la colonne. Donc, typeof (colonname) devrait fonctionner parfaitement. Merci beaucoup.


@ DAN04, quelle serait la syntaxe? Par exemple, puis-je l'écrire comme ceci: ColumnAname Texte non NULL Vérification (typeOf (colleName))?


@Kourosh Voir ma réponse postée.



3
votes

pris directement à partir de SQLITE Documents sur DaTatypes pour SQLITE Version 3 EM >:

La plupart des moteurs de base de données SQL (chaque moteur de base de données SQL autre que SQLite, autant que nous sachions) utilise la typographie statique et rigide. Avec la typage statique, le type de données d'une valeur est déterminé par son conteneur - la colonne particulière dans laquelle la valeur est stockée. P>

SQLite utilise un système de type dynamique plus général. En SQLite, le type de données d'une valeur est associé à la valeur elle-même, pas avec son conteneur. Le système de type dynamique de SQLite est à l'envers compatible avec les systèmes de type statique les plus courants d'autres moteurs de base de données en ce sens que les instructions SQL qui fonctionnent sur des bases de données typées statiquement doivent fonctionner de la même manière en SQLite. Cependant, la typage dynamique de SQLite lui permet de faire des choses qui ne sont pas possibles dans des bases de données traditionnelles de type rigide. P> BlockQuote>

Affinité de la colonne: strong> Utilisez pragma table_info (nom de la table); code>. pragma table_info () code> donne une table avec des colonnes CID code>, nom code>, type code>, notnull code>, dflt_value code> et pk code>. p>

Les colonnes de l'ensemble de résultats incluent le nom de la colonne, le type de données, que la colonne puisse être nulle et la valeur par défaut de la colonne. La colonne "PK" de l'ensemble de résultats est nulle pour les colonnes qui ne font pas partie de la clé primaire et constitue l'index de la colonne de la clé primaire des colonnes faisant partie de la clé primaire. P> blockQuote>

DataType de valeur: strong> Utilisez typeof (colonne) code> pour voir comment les valeurs sont réellement stockées par SQLite. P>

Exemple adapté de SECTION 3.4: P>

text|integer|integer|real|text
text|integer|integer|real|real
text|integer|integer|real|integer
blob|blob|blob|blob|blob
null|null|null|null|null


0 commentaires

0
votes

Pour obtenir des informations sur la table Utilisez

typeof(columnName)


0 commentaires