ホームページ  >  に質問  >  本文

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日前554

全員に返信(4)返信します

  • 巴扎黑

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

    次のように、接続の自動送信が無効になっている可能性があります。 リーリー

    次のステートメントをexecuteUpdateに追加して、データベースにレコードがあるかどうかを確認できます。

    リーリー

    さらに、Oracle が認識する :1:2 のステートメントは明らかに Java 側で PreparedStatement を使用するため、このステートメントを Oracle で直接実行することはできません。v$sql_bind_capture の sql_id 条件を使用して特定のバインドを決定できます。変数の値。

    返事
    0
  • 大家讲道理

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

    executeUpdate1 を返し、データベースにレコードがない場合は、transaction しか考えられず、トランザクションが正常に送信されたことを確認できます。 。 executeUpdate返回1数据库没有记录,那我只能想到事务了,确认事务有成功提交。

    INSERT into "wchong_test" ("name","age")values(:1,:2)

    :1/:2 感觉是命名参数啊,类似于spring jdbc中的Named Parameter,很显示你直接执行这条SQL是有问题的:1这不是一个正确数据类型,要使用':1' リーリー

    :1/:2 は、spring jdbcNamed Parameter に似た名前付きパラメータのようです。これは、これを直接実行することを示しています。 SQL 問題があります。:1 これは正しいデータ型ではありません。':1' で囲む必要があります。 🎜

    返事
    0
  • 迷茫

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

    2 つの質問について考えてみましょう

    1. SQL は PreparedStatement を使用します。サーバーはこの SQL を PreparedStatement として使用するのではなく、直接使用しますか?

    2. サーバーに問題がない場合、クエリは正常に実行できますか?トランザクション管理が追加されていないことを考慮してください。サービスを作成するときに @Transaction を追加するのを忘れていたため、すべての挿入、削除、および変更操作が送信されずに実行され、エラーが報告されず、データベース データが変更されませんでした。 Spring のトランザクション管理を追加するのを忘れていたことがわかりました。これが問題かどうかを確認することもできます。もちろん、必ずしも Spring のトランザクション管理を使用する必要はありませんが、原理は似ています。

    最後に、この文を Navicat で直接実行しても、何も影響はありません。何を確認したいのですか?何を入れますか?これは明らかに間違っています。SQL を直接テストする場合は、プレースホルダーを一重引用符で囲まれたテスト データに変更します。

    返事
    0
  • 天蓬老师

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

    insert intoのtableNameに「」を付ける必要はないですよね?

    返事
    0
  • キャンセル返事