Rumah  >  Soal Jawab  >  teks badan

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 hari yang lalu552

membalas semua(4)saya akan balas

  • 巴扎黑

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

    Mungkin penyerahan sambungan automatik dilumpuhkan, seperti

     conn.setAutoCommit(false);

    Anda boleh menambah penyataan berikut untuk executeUpdate, dan kemudian semak sama ada terdapat rekod dalam pangkalan data.

    conn.commit();

    Selain itu, pernyataan dengan :1:2 dilihat oleh oracle jelas menggunakan PreparedStatement di sebelah java, jadi pernyataan ini tidak boleh dilaksanakan secara langsung dalam oracle Anda boleh menggunakan keadaan sql_id dari v$sql_bind_capture untuk mencari Nilai bagi. pembolehubah ikatan tertentu.

    balas
    0
  • 大家讲道理

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

    Jika executeUpdate mengembalikan 1 dan tiada rekod dalam pangkalan data, maka saya hanya boleh memikirkan 事务 untuk mengesahkan bahawa transaksi telah berjaya diserahkan.

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

    :1/:2 Rasanya ia adalah parameter bernama, serupa dengan spring jdbc dalam Named Parameter, yang menunjukkan bahawa terdapat masalah jika anda melaksanakan SQL ini secara langsung :1 Ini bukan jenis data yang betul . Gunakan ':1' yang disertakan dalam tanda petikan.

    balas
    0
  • 迷茫

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

    Pertimbangkan dua soalan

    1. SQL anda menggunakan PreparedStatement Adakah pelayan secara langsung menggunakan SQL ini untuk melaksanakan operasi pangkalan data dan bukannya menggunakannya sebagai PreparedStatement?

    2. Jika tiada masalah dengan pelayan anda, bolehkah pertanyaan itu berfungsi seperti biasa? Pertimbangkan sama ada pengurusan urus niaga belum ditambah Saya sering terlupa untuk menambah @Transaction semasa menulis perkhidmatan, jadi semua operasi pemadaman, pemadaman dan pengubahsuaian telah dilaksanakan tanpa diserahkan, tiada ralat dilaporkan dan data pangkalan data tidak berubah mendapati bahawa saya terlupa untuk menambah pengurusan urus niaga musim bunga Anda juga boleh menyemak sama ada ini masalahnya, anda mungkin tidak semestinya menggunakan pengurusan transaksi musim bunga, tetapi prinsipnya adalah serupa

    Akhir sekali, jika anda melaksanakan ayat ini secara langsung dalam Navicat, ia pasti tidak akan memberi kesan. Masukkan apa? Jelas sekali ini salah Jika anda ingin menguji SQL secara langsung, tukar pemegang tempat untuk menguji data yang disertakan dalam petikan tunggal.

    balas
    0
  • 天蓬老师

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

    Anda tidak perlu menambah "" pada tableName insert into, bukan?

    balas
    0
  • Batalbalas