Java Database Connectivity (JDBC) API adalah serangkaian antarmuka yang memungkinkan pemrogram Java mengakses database. Antarmuka dari berbagai pengembang tidak persis sama. Setelah menggunakan JDBC Oracle selama bertahun-tahun, saya telah mengumpulkan banyak keterampilan yang memungkinkan kita memanfaatkan kinerja sistem dengan lebih baik dan mencapai lebih banyak fungsi.
1. Gunakan driver tipis dalam pengembangan perangkat lunak klien
. Dalam hal pengembangan perangkat lunak Java, database Oracle menyediakan empat jenis driver, dua di antaranya digunakan untuk perangkat lunak klien seperti perangkat lunak aplikasi, applet, dan servlet, dan dua lainnya digunakan untuk perangkat lunak klien. perangkat lunak klien seperti perangkat lunak aplikasi, applet, dan servlet. Perangkat lunak sisi server seperti prosedur tersimpan Java dalam database. Dalam pengembangan perangkat lunak sisi klien, kita dapat memilih driver OCI atau driver Thin. Driver OCI menggunakan Java Localization Interface (JNI) untuk berkomunikasi dengan database melalui perangkat lunak klien Oracle. Driver Thin adalah driver Java murni yang berkomunikasi langsung dengan database. Untuk kinerja maksimal, Oracle merekomendasikan penggunaan driver OCI dalam pengembangan perangkat lunak klien, dan ini tampaknya benar. Namun saya menyarankan untuk menggunakan driver Thin, karena melalui banyak pengujian ditemukan bahwa performa driver Thin melebihi driver OCI dalam keadaan normal.
2. Matikan fungsi pengiriman otomatis untuk meningkatkan kinerja sistem.
Saat membuat koneksi dengan database untuk pertama kalinya, secara default, koneksi berada dalam mode pengiriman otomatis. Untuk kinerja yang lebih baik, Anda dapat mematikan fungsi autocommit dengan memanggil metode setAutoCommit() dari kelas Connection dengan parameter Boolean false, sebagai berikut:
conn.setAutoCommit
(false);
, kita perlu mengelola transaksi secara manual dengan memanggil metode commit() dan rollback() dari kelas Connection.
3. Gunakan objek Pernyataan dalam SQL dinamis atau perintah berbatas waktu
. Saat menjalankan perintah SQL, kami memiliki dua opsi: Anda dapat menggunakan objek PreparedStatement atau objek Pernyataan. Tidak peduli berapa kali Anda menggunakan perintah SQL yang sama, PreparedStatement hanya mem-parsing dan mengkompilasinya sekali. Saat menggunakan objek Pernyataan, setiap kali perintah SQL dijalankan, perintah tersebut diuraikan dan dikompilasi. Ini mungkin membuat Anda berpikir bahwa menggunakan objek PreparedStatement lebih cepat dibandingkan menggunakan objek Statement. Namun, pengujian yang saya lakukan menunjukkan bahwa dalam perangkat lunak klien hal ini tidak terjadi. Oleh karena itu, dalam operasi SQL yang terbatas waktu, kecuali perintah SQL diproses secara batch, kita harus mempertimbangkan untuk menggunakan objek Pernyataan.
Selain itu, penggunaan objek Pernyataan juga membuat penulisan perintah SQL dinamis menjadi lebih mudah karena kita dapat menggabungkan string untuk membuat perintah SQL yang valid. Oleh karena itu, saya percaya bahwa objek Pernyataan dapat membuat pembuatan dan pelaksanaan perintah SQL dinamis menjadi lebih mudah.
4. Gunakan fungsi pembantu untuk memformat perintah SQL dinamis.
Saat membuat perintah SQL dinamis yang dijalankan menggunakan objek Pernyataan, kita perlu menangani beberapa masalah pemformatan. Misalnya, jika kita ingin membuat perintah SQL yang menyisipkan nama O'Reilly ke dalam tabel, kita harus mengganti tanda "'" di O'Reilly dengan dua tanda "''" yang berurutan. Cara terbaik untuk menyelesaikan tugas ini adalah dengan membuat metode pembantu yang melakukan operasi penggantian, dan kemudian menggunakan metode pembantu yang dibuat ketika string koneksi dinyatakan sebagai perintah SQL menggunakan rumus. Demikian pula, kita dapat membuat metode pembantu menerima nilai Tanggal dan kemudian mengeluarkan ekspresi string berdasarkan fungsi to_date() Oracle.
5. Gunakan objek PreparedStatement untuk meningkatkan efisiensi database secara keseluruhan.
Saat menggunakan objek PreparedStatement untuk menjalankan perintah SQL, perintah tersebut diuraikan dan dikompilasi oleh database, dan kemudian ditempatkan di buffer perintah. Kemudian, setiap kali objek PreparedStatement yang sama dijalankan, objek tersebut akan diurai lagi, tetapi tidak dikompilasi lagi. Perintah yang telah dikompilasi ditemukan di buffer dan dapat digunakan kembali. Dalam aplikasi tingkat perusahaan dengan jumlah pengguna yang besar, perintah SQL yang sama sering kali dijalankan berulang kali. Pengurangan jumlah kompilasi yang dilakukan dengan menggunakan objek PreparedStatement dapat meningkatkan kinerja database secara keseluruhan. Kecuali jika membuat, menyiapkan, dan menjalankan tugas PreparedStatement di sisi klien membutuhkan waktu lebih lama daripada tugas Statement, saya akan merekomendasikan penggunaan objek PreparedStatement dalam semua kasus kecuali untuk perintah SQL dinamis.
6. Gunakan objek PreparedStatement untuk memproses operasi penyisipan atau pembaruan berulang dalam batch.
Jika Anda memproses operasi penyisipan dan pembaruan dalam batch, Anda dapat mengurangi waktu yang dibutuhkan secara signifikan. Statement dan CallableStatement yang disediakan oleh Oracle tidak terlalu mendukung pemrosesan batch. Hanya objek PreparedStatement yang benar-benar mendukung pemrosesan batch. Kita dapat memilih pemrosesan batch JDBC standar menggunakan metode addBatch() dan mengeksekusiBatch(), atau memilih metode milik Oracle yang lebih cepat dengan memanfaatkan metode setExecuteBatch() objek PreparedStatement dan metode mengeksekusiUpdate() standar. Untuk menggunakan mekanisme batching milik Oracle, Anda dapat memanggil setExecuteBatch() sebagai berikut:
PreparedStatement pstmt3D null;
try {
(
(OraclePreparedStatement)
pstmt
).setExecuteBatch
(30)
;
() adalah batas atas. Ketika nilai ini tercapai, eksekusi perintah SQL akan dipicu secara otomatis, dan metode mengeksekusiUpdate() standar akan dikirim ke database sebagai proses batch. Kita dapat mentransfer tugas batch kapan saja dengan memanggil metode sendBatch() dari kelas PreparedStatement.
7. Gunakan metode pencari lokasi Oracle untuk menyisipkan dan memperbarui objek besar (LOB).
Kelas PreparedStatement Oracle tidak sepenuhnya mendukung pemrosesan objek besar seperti BLOB dan CLOB. Secara khusus, driver Thin tidak mendukung pengaturan menggunakan setObject(). dan metode setBinaryStream() dari objek PreparedStatement. Nilai BLOB tidak mendukung pengaturan nilai CLOB menggunakan metode setCharacterStream(). Hanya metode di pencari lokasi itu sendiri yang dapat memperoleh nilai tipe LOB dari database. Anda dapat menggunakan objek PreparedStatement untuk menyisipkan atau memperbarui LOB, namun Anda perlu menggunakan pencari lokasi untuk mendapatkan nilai LOB. Karena dua masalah ini, saya sarankan menggunakan metode locator untuk memasukkan, memperbarui, atau mendapatkan nilai LOB.
8. Gunakan sintaks SQL92 untuk memanggil prosedur tersimpan
. Saat memanggil prosedur tersimpan, kita dapat menggunakan SQL92 atau Oracle PL/SQL. Tidak ada manfaat praktis menggunakan Oracle PL/SQL, dan ini akan menimbulkan masalah bagi pengembang yang akan memelihara aplikasi Anda masa depan. Akan ada masalah, oleh karena itu, saya sarankan menggunakan SQL92 saat memanggil prosedur tersimpan.
9. Gunakan Objek SQL untuk mentransfer skema objek ke database.
Karena database Oracle dapat digunakan sebagai database berorientasi objek, Anda dapat mempertimbangkan untuk mentransfer skema berorientasi objek dalam aplikasi ke database. Pendekatan saat ini adalah membuat kacang Java sebagai objek database yang disamarkan, memetakan propertinya ke dalam tabel relasional, dan kemudian menambahkan metode ke kacang tersebut. Meskipun tidak ada masalah dalam melakukan hal ini di Java, karena operasi dilakukan di luar database, perangkat lunak aplikasi lain yang mengakses database tidak dapat memanfaatkan model objek. Jika Anda memanfaatkan teknologi berorientasi objek Oracle, Anda dapat mensimulasikan data dan operasinya dalam database dengan membuat tipe objek database baru, dan kemudian menggunakan alat seperti JPublisher untuk menghasilkan kelas Java bean Anda sendiri. Jika Anda menggunakan metode ini, tidak hanya aplikasi Java yang dapat menggunakan model objek perangkat lunak aplikasi, tetapi perangkat lunak aplikasi lain yang memerlukan berbagi data dan operasi dalam aplikasi Anda juga dapat menggunakan model objek perangkat lunak aplikasi.
10. Gunakan SQL untuk menyelesaikan operasi dalam database.
Pengalaman paling penting yang ingin saya perkenalkan kepada Anda adalah memanfaatkan sepenuhnya pendekatan berorientasi set SQL untuk menyelesaikan kebutuhan pemrosesan database, daripada menggunakan bahasa pemrograman prosedural seperti Java.
Jika programmer mencari banyak baris dalam satu tabel, setiap baris dalam hasil akan mencari data di tabel lain. Terakhir, programmer membuat perintah UPDATE terpisah untuk memperbarui data di tabel pertama secara batch. Tugas serupa dengan ini dapat diselesaikan dalam perintah UPDATE dengan menggunakan subkueri multi-kolom dalam klausa set. Mengapa membiarkan data mengalir di Internet ketika Anda dapat menyelesaikan tugas dalam satu perintah SQL? Saya menyarankan agar pengguna mempelajari dengan cermat cara memaksimalkan kekuatan SQL.
Penulis: picva Sumber: Komunitas Teknologi CCID