往用odbc插入数据库,从oracle里能查到最近执行的sql,但是数据库记录没增加。而且最近执行的那条SQL:INSERT into "wchong_test" ("name","age")values(:1,:2),单独在客户端执行这条SQL会报错:[Err] ORA-01008: not all variables bound。
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.
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.
Mungkin penyerahan sambungan automatik dilumpuhkan, seperti
Anda boleh menambah penyataan berikut untuk executeUpdate, dan kemudian semak sama ada terdapat rekod dalam pangkalan data.
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
mengembalikan1
dan tiada rekod dalam pangkalan data, maka saya hanya boleh memikirkan事务
untuk mengesahkan bahawa transaksi telah berjaya diserahkan.:1/:2
Rasanya ia adalah parameter bernama, serupa denganspring jdbc
dalamNamed 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.
Anda tidak perlu menambah "" pada tableName insert into, bukan?