J'ai une table créée comme ceci:
CREATE TABLE [dbo].[LogInfo]( [date_current] [datetime] NULL, [classname] [varchar](500) NULL, [output] [varchar](500) NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[LogInfo] ADD DEFAULT (getdate()) FOR [date_current] GO
la colonne 'date_current' est donc par défaut la date et l'heure actuelles.
J'ai une déclaration préparée comme ceci:
PreparedStatement psInsert_ = conn.prepareStatement("INSERT INTO LogInfo VALUES(?,?,?)"); psInsert_.setTimestamp(1, ????????); psInsert_.setSsortingng(2, "test text1"); psInsert_.setSsortingng(3, "test text2");
Je suis un peu perplexe quant à la façon de spécifier le premier paramètre de l'instruction préparée et je ne trouve aucun exemple de quelque chose comme ça nulle part.
Si j'essaie d'omettre le paramètre par défaut:
PreparedStatement psInsert_ = conn.prepareStatement("INSERT INTO LogInfo ('classname','output') VALUES(?,?)"); psInsert_.setSsortingng(1, "test text1"); psInsert_.setSsortingng(2, "test text2");
J'obtiens une erreur en disant que 'classname' et 'output' sont des noms de colonnes invalides.
Comment dois-je faire cela? Merci.
Le problème dans votre requête est que vous utilisez des guillemets simples ' '
qui sont utilisés pour les littéraux de string et pas pour les noms d'objects, vous voulez utiliser des parenthèses [ ]
ou rien du tout. Comme vous avez défini une valeur par défaut, vous pouvez ignorer cette colonne dans l'instruction d'insertion:
"INSERT INTO LogInfo ([classname],[output]) VALUES(?,?)" or "INSERT INTO LogInfo (classname,output) VALUES(?,?)"
L'utilisation d'identifiants délimités n'est réellement nécessaire que si le nom de votre colonne est invalide pour une raison quelconque (il peut s'agir d'un mot-key réservé, ou commencer avec un caractère invalide, ou contenir un espace, etc.). Vos colonnes n'en ont pas besoin, vous devriez donc pouvoir les ignorer.
Voir MSDN: Database Identifiers pour plus d'informations sur les règles de dénomination pour SQL Server.
De l'API:
void setDate(int parameterIndex, Date x)
Assurez-vous que votre date est un object Date.
Référence:
Votre deuxième requête échoue car les noms de colonne sont entre guillemets simples. Essayer:
INSERT INTO LogInfo (nom de class, sortie) VALUES (?,?)
Ne pas citer les colonnes. Vous pouvez éventuellement utiliser le mot-key DEFAULT
:
INSERT INTO LogInfo (date_current, classname, output) VALUES(DEFAULT, ?, ?)
Je crois que votre erreur réside dans le fait que vous avez des guillemets simples autour de classname et de sortie. Supprimez les guillemets simples et votre deuxième solution devrait fonctionner.