|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() |
Bonjour à tous !
J'essaie de faire quelque chose d'à priori assez simple : insérer des données dans une table, dont voici la définition : Code :
Code :
INSERT INTO country(countryID, name) VALUES (1, 'asdf'); Code :
ERROR: COLUMN "countryid" of relation "country" does NOT exist Merci d'avance !
__________________
Wookai
|
||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() |
Ca m'est une fois arrivé alors que je créais ma base de données: Je m'étais trompé dans le type d'un domaine que j'avais supprimé ( en cascade ) => j'ai du recréeer la colonne mais une erreur du même type se produisait.
Comme j'étais occupé de créer la db, je me suis contenté de la dumper pour la recréer, je ne sais pas si c'est possible pour toi ... Essaie peut-être de supprimer / recréer juste la table ( apparemment tu ne l'utilises pas encore en production ... ) |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() |
Non non, je ne suis pas en prod
Je vais essayer ça dès que je peux... C'est quand même bizarre !Merci pour la réponse en tous cas !
__________________
Wookai
|
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : novembre 2004 Messages : 22 ![]() |
Salut
Le problème vient des caractères majuscules dans le nom des colonnes. Il faut faire INSERT INTO table("countryID", .... ou n'utiliser que des minuscules |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() |
Donc ta solution est de mettre les noms des champs entre guillemet, ou alors changer le nom de la colonne pour tout mettre en minuscule ?
La première solution me plairait mieux, mais le code est généré par Hibernate, je vais donc voir si je peux changer ça !
__________________
Wookai
|
|
|
00
|
|
|
#6 |
|
Invité(e)
Messages : n/a ![]() |
La meilleure solution serait de mettre tous les champs en minuscule ainsi que les noms de tables.
L'avantage sera, dans le cas où tu utiliseras par exemple PHP, d'éviter de mettre les anti-slashes devant chacun des guillemets. Cela te fera aussi une écriture plus propre. |
00
|
|
|
#7 |
|
Membre habitué
![]() |
C'est une solution... Mais je ne sais pas si c'est la meilleure !
En effet, j'aime beaucoup séparer les différents mots par une majuscule, à la "java-style" : firstName, countryID, etc... Je trouve la solution "tout lowercase" moins jolie. De plus, comme mon code est généré à partir de ma base de données, ça me fait directement des attributs dans le même style pour mes classes (et mes noms de classes).
__________________
Wookai
|
|
|
00
|
|
|
#8 |
|
Invité(e)
Messages : n/a ![]() |
Ca n'est bien sûr pas une règle.
Pour ma part, je regrette d'avoir mis, à la création de ma base de données, des majuscules pour tous mes noms de tables. Quand je travaillais par odbc ça n'était pas génant, mais maintenant que j'attaque ma base en PHP, les choses ne sont plus les mêmes. Mon application web est massivement dédiée à l'accès aux données, ce qui fait que mon code est plus complexe à l'écriture. M'enfin.... |
00
|
|
|
#9 |
|
Membre habitué
![]() |
Je suis d'accord que cela peut poser problème (par exemple, MySQL sous windows n'est pas sensible à la casse, mais sous Linux si, il me semble !).
Je trouve juste bizarre qu'un détail comme ça pose autant de problème !
__________________
Wookai
|
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() |
Bon, après divers tests, c'est bien ça le problème : PostgreSQL veut que les champs qui contiennent autre chose que des lettres en minuscule soient entourés de guillemets
Par contre, j'ai trouvé comment faire pour que Hibernate ajoute ces guillemets : il suffit d'entourer le nom du champ de "backquotes" (`) dans le fichier de mapping, et c'est bon ! Merci pour votre aide en tous cas ! Sinon, pour jnore : si tu veux éviter d'avoir à échapper tous tes " dans tes requêtes SQL en PHP, il te suffit d'utiliser des guillemets simples (') pour déclarer des chaînes de caractères ! C'est plus simple, et aussi plus rapide pour PHP (il n'a pas à parcourir toute la chaîne à la recherche de variable à remplacer !).
__________________
Wookai
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com