Maison  >  Questions et réponses  >  le corps du texte

java - 用odbc往oracle插入记录,excuteUpdate返回1,代码无报错,但是数据库里记录没有增加。

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

ringa_leeringa_lee2714 Il y a quelques jours551

répondre à tous(4)je répondrai

  • 巴扎黑

    巴扎黑2017-04-18 10:33:21

    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.

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:33:21

    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.

    répondre
    0
  • 迷茫

    迷茫2017-04-18 10:33:21

    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.

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:33:21

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

    répondre
    0
  • Annulerrépondre