往用odbc插入数据库,从oracle里能查到最近执行的sql,但是数据库记录没增加。而且最近执行的那条SQL:INSERT into "wchong_test" ("name","age")values(:1,:2),单独在客户端执行这条SQL会报错:[Err] ORA-01008: not all variables bound。
Il se peut que la soumission automatique de la connexion soit désactivée, comme
conn.setAutoCommit(false);
Vous pouvez ajouter l'instruction suivante à executeUpdate, puis vérifier s'il y a des enregistrements dans la base de données.
conn.commit();
De plus, l'instruction avec :1:2 vue par oracle utilise évidemment PreparedStatement du côté java, donc cette instruction ne peut pas être exécutée directement dans oracle. Vous pouvez utiliser la condition sql_id de v$sql_bind_capture pour trouver la valeur de. variable de liaison spécifique.
Si executeUpdate renvoie 1 et qu'il n'y a aucun enregistrement dans la base de données, alors je ne peux penser qu'à 事务 pour confirmer que la transaction a été soumise avec succès.
INSERT into "wchong_test" ("name","age")values(:1,:2)
:1/:2 On dirait qu'il s'agit d'un paramètre nommé, similaire au spring jdbc dans Named Parameter, ce qui montre qu'il y a un problème si vous exécutez directement ce SQL :1 Ce n'est pas un type de données correct. . Utilisez ':1' entre guillemets.
1. Votre SQL utilise PreparedStatement. Le serveur utilise-t-il directement ce SQL pour effectuer des opérations de base de données au lieu de l'utiliser comme PreparedStatement ?
2. S'il n'y a pas de problème avec votre serveur, la requête peut-elle fonctionner normalement ? Considérez si la gestion des transactions n'a pas été ajoutée.J'ai souvent oublié d'ajouter @Transaction lors de l'écriture des services, donc toutes les opérations d'insertion, de suppression et de modification ont été exécutées sans être soumises, aucune erreur n'a été signalée et les données de la base de données n'ont pas changé. J'ai découvert que j'avais oublié d'ajouter la gestion des transactions de Spring. Vous pouvez également vérifier si c'est là le problème. Bien sûr, vous n'utilisez pas nécessairement la gestion des transactions de Spring, mais le principe est similaire
.
Enfin, si vous exécutez cette phrase directement dans Navicat, cela n'aura certainement aucun effet. Ce sont tous des espaces réservés. Que voulez-vous vérifier ? Insérer quoi ? Évidemment, c'est faux. Si vous souhaitez tester SQL directement, modifiez l'espace réservé pour tester les données entre guillemets simples.
Il se peut que la soumission automatique de la connexion soit désactivée, comme
Vous pouvez ajouter l'instruction suivante à executeUpdate, puis vérifier s'il y a des enregistrements dans la base de données.
De plus, l'instruction avec :1:2 vue par oracle utilise évidemment PreparedStatement du côté java, donc cette instruction ne peut pas être exécutée directement dans oracle. Vous pouvez utiliser la condition sql_id de v$sql_bind_capture pour trouver la valeur de. variable de liaison spécifique.
Si
executeUpdate
renvoie1
et qu'il n'y a aucun enregistrement dans la base de données, alors je ne peux penser qu'à事务
pour confirmer que la transaction a été soumise avec succès.:1/:2
On dirait qu'il s'agit d'un paramètre nommé, similaire auspring jdbc
dansNamed Parameter
, ce qui montre qu'il y a un problème si vous exécutez directement ce SQL:1
Ce n'est pas un type de données correct. . Utilisez':1'
entre guillemets.Considérez deux questions
1. Votre SQL utilise PreparedStatement. Le serveur utilise-t-il directement ce SQL pour effectuer des opérations de base de données au lieu de l'utiliser comme PreparedStatement ?
2. S'il n'y a pas de problème avec votre serveur, la requête peut-elle fonctionner normalement ? Considérez si la gestion des transactions n'a pas été ajoutée.J'ai souvent oublié d'ajouter @Transaction lors de l'écriture des services, donc toutes les opérations d'insertion, de suppression et de modification ont été exécutées sans être soumises, aucune erreur n'a été signalée et les données de la base de données n'ont pas changé. J'ai découvert que j'avais oublié d'ajouter la gestion des transactions de Spring. Vous pouvez également vérifier si c'est là le problème. Bien sûr, vous n'utilisez pas nécessairement la gestion des transactions de Spring, mais le principe est similaire
.Enfin, si vous exécutez cette phrase directement dans Navicat, cela n'aura certainement aucun effet. Ce sont tous des espaces réservés. Que voulez-vous vérifier ? Insérer quoi ? Évidemment, c'est faux. Si vous souhaitez tester SQL directement, modifiez l'espace réservé pour tester les données entre guillemets simples.
Vous n'avez pas besoin d'ajouter "" au nom de la table à insérer, n'est-ce pas ?