Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menutup kumpulan hasil streaming (menggunakan jdbc mysql) membutuhkan waktu lama

Jadi seperti yang diposting dalam komentar saya untuk pertanyaan itu, jawaban resmi dari konektor MySQL adalah Anda harus mengalirkan semua hasil yang ditetapkan agar dapat ditutup (http://dev.mysql.com/doc/refman/5.5/en/connector-j- reference-implementation-notes.html ). Selain itu, Anda tidak dapat melakukan kueri lagi saat hasil streaming berlangsung.

Sebagai peretasan yang benar-benar menjijikkan, saya menggunakan refleksi untuk masuk ke RowDataDynamic (ver. 5.1.24) dan memalsukan pengecualian yang terputus, seperti:

    final Class<?> rdClass = rd.getClass();
    final Field isInterruptedField = rdClass.getDeclaredField("isInterrupted");
    isInterruptedField.setAccessible(true);  // override 'protected' visibility
    isInterruptedField.set(rd, true);

Catatan, Anda harus berjalan menyusuri objek apa pun yang Anda pegang untuk sampai ke ResultSet. Bagi saya, saya menggunakan kelas ScrollableResults Hibernate. Ini berarti mendapatkan referensi ResultSet darinya (kelas supernya, sebenarnya), lalu RowData dari sana.

Ini akan memungkinkan operasi penutupan berlangsung tanpa streaming sisa hasil NAMUN Saya mendapatkan pengecualian karena ukuran paket yang tidak cocok ketika saya mencoba untuk mengembalikan transaksi (yang baru saja saya tangkap dan abaikan). Menggunakan Atomikos sebagai kumpulan koneksi, saya akan melihat peringatan tentang beberapa koneksi berikutnya saat semuanya dibersihkan, tetapi semuanya masih berfungsi dengan baik.

Jelas pendekatan ini mungkin tidak bekerja untuk semua orang, tetapi setidaknya ini solusi ketika melakukan pemrosesan melalui kueri basis data atau menulis logika yang lebih rumit untuk mengambil hasil dalam kumpulan tidak akan berhasil.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengaktifkan Log Kueri MySQL?

  2. html menelusuri drop-down nilai yang dipilih tidak dimasukkan dalam MYSQL

  3. ASP Klasik + Unggahan ASP Murni Motobit + Charset UTF-8

  4. mysql:pilih max(score) tidak mengembalikan data baris yang relevan

  5. MySQL bergabung dengan tabel di mana nama tabel adalah bidang dari tabel lain