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

往用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

membalas semua(4)
巴扎黑

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.

大家讲道理

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.

迷茫

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.

Peter_Zhu

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan