Sama seperti objek koneksi membuat pernyataan dan disiapkan objek, itu juga membuat objek callablestatement yang akan digunakan untuk menjalankan prosedur tersimpan database.
Buat objek callablestatement:
Asumsikan, prosedur tersimpan Oracle berikut perlu dieksekusi:
Buat atau ganti Prosedur getempname (emp_id in number, emp_first out varchar) asbegin pilih pertama menjadi emp_first dari karyawan di mana id = emp_id; end;
Catatan: Di atas telah menulis prosedur tersimpan Oracle, tetapi kami menggunakan database MySQL, menulis prosedur tersimpan yang sama untuk MySQL sebagai berikut, membuat di database EMP:
Pembatas $$ Prosedur Drop Jika ada `emp`.`getempname` $$ Buat prosedur` emp`.`getempname` (dalam emp_id int, keluar emp_first varchar (255)) Mulailah terlebih dahulu ke dalam emp_first dari karyawan di mana id = emp_id; end $$ pembatas;
Ada tiga jenis parameter: di, keluar dan tidak masuk. Objek Persiapan hanya digunakan dalam parameter. Objek callablestatement dapat menggunakan ketiganya.
Berikut setiap definisi:
Cuplikan kode berikut menunjukkan cara instantiate objek callablestatement berdasarkan prosedur tersimpan di atas menggunakan metode connection.prepareCall ():
Callablestatement cstmt = null; coba {string sql = "{call getempname (?,?)}"; CSTMT = Conn.PrepareCall (SQL); . . .} catch (sqlexception e) {. . .} Akhirnya { . . .}SQL dari variabel string mewakili prosedur tersimpan, menggunakan placeholder parameter.
Menggunakan objek callablestatement menggunakan objek yang disiapkan. Nilai harus terikat ke semua parameter sebelum menjalankan pernyataan, jika tidak, SQLException akan diterima.
Jika ada parameter dalam, cukup ikuti aturan dan trik yang sama yang berlaku untuk objek yang disiapkan; Gunakan metode setxxx () yang sesuai dengan tipe data Java yang akan terikat.
Saat menggunakan parameter out dan inout, registerOutParameter () dengan metode callablestatement tambahan harus digunakan. Metode RegisterOutParameter () JDBC Tipe Data terikat pada prosedur tersimpan yang dikembalikan oleh tipe data.
Setelah prosedur tersimpan dipanggil, nilainya diambil menggunakan parameter output dari metode getxxx (). Metode ini melemparkan nilai tipe SQL untuk mengambil tipe data Java.
Tutup objek callablestatement:
Sama seperti menutup objek pernyataan lainnya, objek callablestatement juga harus ditutup karena alasan yang sama.
Metode panggilan sederhana ke tutup () akan melakukan pekerjaan itu. Jika objek koneksi ditutup terlebih dahulu, itu akan menutup objek callablestatement juga. Namun, objek Callablestatement harus selalu ditutup secara eksplisit untuk memastikan izin yang benar.
Callablestatement cstmt = null; coba {string sql = "{call getempname (?,?)}"; CSTMT = Conn.PrepareCall (SQL); . . .} catch (sqlexception e) {. . .} akhirnya {cstmt.close ();} PS: CallAblestatement Object Instance
Berikut adalah contoh prosedur tersimpan MySQL menggunakan callablestatement bersama dengan getempname berikut ():
Pastikan prosedur tersimpan telah dibuat di database EMP. Ini dapat dilakukan dengan menggunakan browser kueri MySQL.
Pembatas $$ Prosedur Drop Jika ada `emp`.`getempname` $$ Buat prosedur` emp`.`getempname` (dalam emp_id int, keluar emp_first varchar (255)) Mulailah terlebih dahulu ke dalam emp_first dari karyawan di mana id = emp_id; end $$ pembatas;
Kode skrip ini telah ditulis berdasarkan instalasi lingkungan dan database di bab sebelumnya.
Salin contoh berikut jdbcexample.java, kompilasi dan jalankan seperti yang ditunjukkan di bawah ini:
// Langkah 1. Impor Paket yang Diperlukan IMPORT JAVA.SQL.*; Kelas Publik JdbCexample {// Nama Driver JDBC dan Database URL Static Final String JDBC_DRIVER = "com.mysql.jdbc.driver"; string final statis db_url = "jdbc: mysql: // localhost/emp"; // kredensial basis data static final string user = "username"; Static Final String Pass = "Kata Sandi"; public static void main (string [] args) {connection conn = null; Callablestatement stmt = null; Coba {// Langkah 2: Daftarkan JDBC Driver Class.forname ("com.mysql.jdbc.driver"); // Langkah 3: Buka koneksi System.out.println ("Menghubungkan ke Database ..."); conn = driverManager.getConnection (db_url, user, pass); // Langkah 4: Jalankan kueri System.out.println ("Membuat Pernyataan ..."); String sql = "{call getempname (?,?)}"; stmt = conn.preparecall (sql); // mengikat parameter terlebih dahulu, kemudian mengikat parameter int empid = 102; stmt.setint (1, empid); // Ini akan mengatur ID sebagai 102 // karena parameter kedua keluar jadi daftarkannya stmt.registeroutparameter (2, java.sql.types.varchar); // Gunakan metode Execute untuk menjalankan prosedur tersimpan. System.out.println ("mengeksekusi prosedur tersimpan ..."); stmt.execute (); // Ambil nama karyawan dengan metode getxxx string empname = stmt.getString (2); System.out.println ("nama emp dengan id:" + empid + "adalah" + empname); stmt.close (); conn.close (); } catch (sqlexception se) {// menangani kesalahan untuk jdbc se.printstacktrace (); } catch (Exception e) {// menangani kesalahan untuk class.forname e.printstacktrace (); } akhirnya {// akhirnya blok yang digunakan untuk menutup sumber daya coba {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // tidak ada yang bisa kita coba {if (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // end akhirnya coba} // end try system.out.println ("Selamat tinggal!"); } // end Main} // end jdbcexampleSekarang kompilasi contoh di atas sebagai berikut:
C:> javac jdbcexample.java
Saat menjalankan JDBCexample, itu menghasilkan hasil berikut:
C:> java jdbcexample
Menghubungkan ke database ... membuat pernyataan ... mengeksekusi prosedur tersimpan ... nama emp dengan ID: 102 adalah zaidgoodbye!
JDBC's SQL Escape Sintaks:
Escape Sintaks memungkinkan fleksibilitas menggunakan fitur -fitur tertentu dari database dengan menggunakan metode dan properti JDBC standar.
Format sintaks SQL Escape umum adalah sebagai berikut:
{kata kunci 'parameter'}Berikut ini adalah berikut yang akan ditemukan sangat berguna saat melakukannya dalam pemrograman JDBC:
D, T, TS Kata kunci:
Mereka membantu menentukan teks perangko tanggal, waktu dan waktu. Seperti yang Anda ketahui, tidak ada dua sistem manajemen basis data yang didasarkan pada waktu dan tanggal dengan cara yang sama. Sintaks pelarian ini memberi tahu driver format, tanggal, atau waktu untuk memberikan ke database target. Contoh Implementasi:
{D 'yyyy-mm-dd'}di mana yyyy = tahun, mm = bulan, dd = hari. Menggunakan sintaks ini {D '2009-09-03'} adalah 9 Maret 2009.
Berikut adalah contoh sederhana tentang cara memasukkan tabel tanggal:
// Buat pernyataan objekstmt = conn.createStateMent (); // masukkan data ==> id, nama depan, nama belakang, dobring sql = "masukkan ke dalam nilai siswa" + "(100, 'zara', 'ali', {d '2001-16-16'})"; stmt.executeupdate (sql);Demikian juga, salah satu dari dua sintaksis berikut dapat digunakan, baik T atau TS:
{t 'hh: mm: ss'}di mana hh = jam, mm = menit, ss = detik. Menggunakan sintaks ini {T '13: 30: 29 '} adalah 1:30 siang 29 siang.
{ts 'yyyy-mm-dd hh: mm: ss'}Ini adalah dua sintaksis 'D' dan 'T' di atas untuk mewakili sintaks kombinasi waktu.
Kata kunci melarikan diri:
Kata kunci ini mengidentifikasi karakter yang melarikan diri yang digunakan dalam klausa sejenis. Berguna saat menggunakan SQL Wildcard % di mana nol atau lebih karakter dicocokkan. Misalnya:
String sql = "Symelar SELECT DARI MATHSYMBOLS Di mana simbol seperti '/%' {Escape ''}"; stmt.execute (sql);Jika Anda menggunakan karakter backslash () sebagai karakter Escape, Anda juga harus menggunakan dua karakter backslash dalam string java literal, karena backslash juga merupakan karakter Java Escape.
Kata kunci FN:
Kata kunci ini berarti menggunakan fungsi skalar di DBMS. Misalnya, Anda dapat menggunakan fungsi panjang SQL untuk menghitung panjang string GE:
{fn length ('hello world')}Ini akan mengembalikan 11, panjang string 'Hello World'. .
Kata kunci panggilan:
Kata kunci ini digunakan untuk memanggil prosedur tersimpan. Misalnya, untuk prosedur tersimpan, Anda memerlukan parameter dalam, gunakan sintaks berikut:
{call my_procedure (?)};Untuk prosedur tersimpan, diperlukan parameter dalam dan parameter keluar, menggunakan sintaks berikut:
{? = hubungi my_procedure (?)}; Kata kunci OJ:
Kata kunci ini digunakan untuk mewakili gabungan eksternal. Sintaksnya adalah sebagai berikut:
{oj Outer-join}Tabel gabungan eksternal = {kiri | Benar | Lengkap} Eksternal gabungan {Tabel | Join Eksternal} Kriteria Pencarian. Misalnya:
String sql = "Pilih karyawan dari {oj Thistable Right Outter bergabunglah dengan ID = '100'}"; stmt.execute (sql);