java - 用odbc往oracle插入记录,excuteUpdate返回1,代码无报错,但是数据库里记录没有增加。
ringa_lee
ringa_lee 2017-04-18 10:31:21
0
4
593

往用odbc插入数据库,从oracle里能查到最近执行的sql,但是数据库记录没增加。而且最近执行的那条SQL:INSERT into "wchong_test" ("name","age")values(:1,:2),单独在客户端执行这条SQL会报错:[Err] ORA-01008: not all variables bound。

ringa_lee
ringa_lee

ringa_lee

répondre à tous(4)
巴扎黑

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.

迷茫

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.

Peter_Zhu

Vous n'avez pas besoin d'ajouter "" au nom de la table à insérer, n'est-ce pas ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal