OOP LANJUT PEMROSESAN DATABASE MENGGUNAKAN JDBC Niko Ibrahim, MIT Universitas Kristen Maranatha Tujuan Memahami Koneksi dan Pemrosesan Basis Data di Java Memahami JDBC Menggunakan MySQL pada program Java Materi Pengenalan library JDBC Diagram pengaksesan database melalui JDBC Step-by-step Setting JDBC untuk MySQL Cara Melakukan Query (SELECT) Cara Memproses Hasil Query Cara Update/Insert/Delete 1st Thing 1st: Siapkan MySQL Jalankan MySQL server + Apache server (melalui XAMPP Control Panel) Masuk ke phpMyAdmin: http://localhost/phpmyadmin/ Di dalam phpMyAdmin, import the “movieSQL.sql” script Browse table “movie”, yang isinya adalah sbb: Pengenalan: JDBC Library JDBC — Java Database Connectivity — adalah suatu feature di Java yang memungkinkan kita untuk melakukan: Library JDBC terdiri atas class-class yang berguna untuk setiap tasks di dalam pemrosesan database, misalnya class untuk: Koneksi ke hampir semua sistem RDBMS yang ada saat ini, Eksekusi perintah SQL, dan Memproses hasil perintah SQL melalui program Java Membuat koneksi ke database Membuat statement menggunakan SQL Mengeksekusi query SQL (statement) di dalam database Menampilkan records yang dihasilkan Semua class-class JDBC adalah bagian dari java.sql package. Bagaimana program Java mengakses database melalui JDBC? Program JDBC driver mysql MYSQL driver oracle ORACLE driver sybase SYBASE JDBC Driver: Apa itu & Bagaimana mendapatkannya? First Thing First: Setting Up a Driver Sebelum Anda dapat menulis program Java yang mengakses database melalui JDBC, pertama-tama Anda harus meng-instal sebuah Driver yang menghubungkan class-class di dalam Java’s database API dengan database yang akan digunakan. Untuk setiap database yang ada di pasaran saat ini, hampir semuanya memiliki driver JDBC-nya. Biasanya driver ini dapat didownload secara gratis melalui website perusahaan database masing-masing. Driver ini seringkali disebut juga sebagai “connector”. Setting up MySQL JDBC Driver Database connector is a driver provided by your database vendor. Database connectors are designed to work exclusively with a specific type of database. You have to obtain the JDBC connector for the database you’re using from the company that makes the database server you’re using. For example, you can get a JDBC connector for MySQL from the MySQL Web site at www.mysql.com . Along with the driver, you get detailed instructions on how to set it up. Step-by-step for: MySQL JDBC driver Download Driver dan Setting Environment 1. 2. Download driver JBDC MySQL dari website berikut: www.mysql.com/products/connector lalu unzip file tsb. Driver JDBC untuk MySQL dinamakan: MySQL Connector/J. Setelah Anda mendownloadnya, unzip file tsb ke suatu folder, misalnya: “c:\MySQL” Tambahkan file driver yang berekstensi “.jar” ke dalam variabel “ClassPath” Misalnya *): c:\mysql\mysql-connector-java-3.1.10-bin.jar atau C:\mysql\mysql-connector-java-5.0.7\mysql-connector-java-5.0.7-bin.jar *) tergantung lokasi dan versi driver yang digunakan That’s all you have to do. You can now connect to MySQL from a Java program. 6 Langkah Koneksi & Akses Database 1. 2. 3. 4. 5. 6. Memanggil Driver JDBC Mendefinisikan URL untuk Koneksi Basis Data & Melakukan Koneksi tsb Membuat Objek Statement Melakukan Query/Update Memproses Hasil Menutup Koneksi 1. Memanggil Driver JDBC Sebelum kita dapat menggunakan JDBC untuk mengakses database SQL, kita harus melakukan koneksi terlebih dahulu. Langkah pertama dalam melakukan koneksi adalah: registrasi driver Caranya adalah dengan menggunakan method “forName” dari kelas “Class” Misalnya untuk meregistrasi connector MySQL, gunakan perintah berikut: Class.forName("com.mysql.jdbc.Driver"); Note that the forName method throws ClassNotFoundException, so you have to enclose this statement in a try/catch block that catches ClassNotFoundException. try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException){ // error handling } 2. Mendefinisikan URL dan Melakukan Koneksi Setelah melalukan registrasi driver class tsb, kita dapat memanggil method getConnection untuk membuka koneksi ke database. Method ini membutuhkan 3 parameter String:the database URL, the user name, and a password. Contoh: String url = "jdbc:mysql://localhost/movies"; String user = "root"; String pw = ""; Connection conn = DriverManager.getConnection(url, user, pw); Note that the getConnection method throws SQLException, so you need to enclose it in a try/catch block statement that catches this exception. Note: You can find these classes — and the other classes for working with SQL databases — in the java.sql package. As a result, you have to include an import statement that specifies this package in any program that uses JDBC. import java.sql package; 3. Membuat Objek Statement Kita memerlukan objek Statement untuk melakukan query dan objek ini dapat dibuat dari objek Connection. Sintaks kode: Statement st = conn.createStatement(); Statement: The Statement interface contains the methods necessary to send statements to the database for execution and return the results. Use the executeQuery method to execute a select statement, or Use the executeUpdate method to execute an insert, update, or delete statement. Putting it all together (Step 1 to 3) Berikut ini adalah sebuah method yang me-return objek Connection yang berfungsi sebagai penghubung ke database MySQL: private static Connection getConnection(){ Connection con = null; try{ Class.forName("com.mysql.jdbc.Driver "); String url = "jdbc:mysql://localhost/movies"; String user = "root"; String pw = " "; con = DriverManager.getConnection(url, user, pw); } catch (ClassNotFoundException e){ System.out.println(e.getMessage()); System.exit(0); } catch (SQLException e){ System.out.println(e.getMessage()); System.exit(0); } return con; } 4. Melakukan Query atau Update Setelah kita memiliki objek Statement, kita dapat menggunakannya untuk mengirimkan query dan mengeksekusinya dengan method executeQuery yang menghasilkan objek bertipe ResultSet. ResultSet: The ResultSet interface represents rows returned from a query. It provides methods you can use to move from row to row and to get the data for a column. Contoh: String query = "SELECT id, title FROM movie"; ResultSet rs = st.executeQuery(query); Note: Apabila ingin melakukan update/insert/delete, gunakan st.executeUpdate(query) 5a. Memproses Hasil Query Untuk memproses hasil query, kita gunakan objek resultSet karena hasil query disimpan dalam objek ini. Method yang sering digunakan: next dan getString Contoh pemrosesan hasil query: while (rs.next()){ System.out.println(rs.getString(1) + " " + rs.getString(2)); } Kode di atas akan menampilkan semua baris hasil query yang masing-masing menampilkan data kolom pertama dan kedua. Memproses hasil query (cont.) Navigating through the result set The ResultSet object returned by the executeQuery statement contains all the rows that are retrieved by the select statement. You can only access one of those rows at a time. You can use the methods shown in the table to move the cursor through a result set. Method Description void close() Closes the result set void last() Moves the cursor to the last row int getRow() Gets the current row number boolean next() Moves to the next row For example, the following snippet shows how you can structure code that processes each row in a result set: while(rows.next()) { // process the current row } All you have to do is replace the comment with statements that retrieve data from the result set and process it, as described in the next section. Memproses hasil query (cont.) Example: Navigating the result set // Already done: // ResultSet rs = st.executeQuery(select); try { while (rs.next()){ String title = movies.getString("Title"); int year = movies.getInt("Year"); double price = movies.getDouble("Price"); String msg = title + " " + year + " " + price; System.out.println(msg); } } catch (SQLException e){ System.out.println(e.getMessage()); } Memproses hasil query (cont.) Getting data from the result set The following table lists the methods of the ResultSet interface you can use to retrieve data from the current row. As you can see, each of these methods comes in two versions: One specifies the column by name, the other by index number. If you know the index number, using it to access the column values is more efficient than using the column names. Method Description boolean getBoolean(String columnName) Gets the value of the specified column as a boolean boolean getBoolean(int columnIndex) Gets the value of the specified column as a boolean Date getDate(String columnName) Gets the value of the specified column as a Date Date getDate(int columnIndex) Gets the value of the specified column as a Date double getDouble(String columnName) Gets the value of the specified column as a double double getDouble(int columnIndex) Gets the value of the specified column as a double int getInt(String columnName) Gets the value of the specified column as a int int getInt(int columnIndex) Gets the value of the specified column as a int String getString(String columnName) Gets the value of the specified column as a String String getString(int columnIndex) Gets the value of the specified column as a String 5b. Untuk Proses Update/Insert/Delete Setelah mengerti bagaimana menampilkan data, maka kita perlu mengerti bagaimana menambah/menghapus/mengupdate data ke tabel. Untuk melakukan hal tersebut, kita menggunakan method executeUpdate("perintah sql untuk insert / update / delete"); Method tersebut akan menghasilkan nilai integer yang merupakan jumlah baris yang dipengaruhi oleh proses update tersebut. int i = st.executeUpdate( "delete from movie where id = ' 2' "); 5b. Untuk Proses Insert/Update/Delete (cont...) Untuk proses updating tabel, kita bisa juga menggunakan objek PreparedStatement: Untuk mengeksekusi PreparedStatement, kita gunakan method executeUpdate() Berikut contoh penggunaannya: PreparedStatement st = conn.prepareStatement ("INSERT INTO movie VALUES (?,?,?)"); st.setString(1, "Passion of The Christ"); st.setInt(2, 2004); st.setDouble(3, 22.5); int i = st.executeUpdate(); .... .... st.close(); 6. Menutup Koneksi Sebelum menutup koneksi basis data, kita juga perlu melepaskan objek ResultSet yang ada dengan kode berikut: st.close(); Untuk menutup koneksi ke basis data, kita tuliskan sbb: conn.close(); Exercise 1. 2. 3. ListMovies.java: aplikasi console Swing & JDBC: Address Book NetBeans & DB tutorial: Contact Application Exercise 1: ListMovies.java 1st Thing 1st: Siapkan MySQL Jalankan MySQL server + Apache server (melalui XAMPP Control Panel) Masuk ke phpMyAdmin: http://localhost/phpmyadmin/ Di dalam phpMyAdmin, import the “movieSQL.sql” script Browse table “movie”, yang isinya adalah sbb: Exercise 1: ListMovies.java Open & Run Console Application: “ListMovies.java” See the full code in “ListMovies.java” When you run the code, the following appears in the console: 1946: 1965: 1974: 1975: 1977: 1987: 1989: 1995: 1997: 2001: It’s a Wonderful Life ($16.45) The Great Race ($14.25) Young Frankenstein ($18.65) The Return of the Pink Panther ($13.15) Star Wars ($19.75) The Princess Bride ($18.65) Glory ($16.45) Apollo 13 ($20.85) The Game ($16.45) The Lord of the Rings: The Fellowship of the Ring ($21.95) Exercise 2: Swing & JDBC Address book (Lihat file PDF yang diberikan) Tutorial membuat address book menggunakan Swing dan JDBC Buat project “java application” baru Nama Project: AddressBookDemoDB Uncheck “create main class” Buat database & user: Buat user baru di MYSQL: (apabila perlu) Userid: niko Password: niko Jalankan script yan berfungsi: membuat MySQL database: addressbook Membuat Table: Person create table Person ( id integer, name varchar(30), address varchar(30), phone integer, email varchar(50) ) Ada 3 files berikut di dalam project: PersonInfo: class JavaBeans berisi atribut dan method untuk Person PersonDAO: class yang menyediakan pengaksesan database untuk objek Person AddressBookForm: user interface untuk mengelola Person A final word for JDBC Berikut cuplikan dokumentasi dari MySQL Connector/J: “Although JDBC is useful by itself, we would hope that if you are not familiar with JDBC that after reading the first few sections of this manual, that you would avoid using naked JDBC for all but the most trivial problems and consider using one of the popular persistence frameworks such as Hibernate, Spring's JDBC templates or Ibatis SQL Maps to do the majority of repetitive work and heavier lifting that is sometimes required with JDBC.” Produk Persistence Framework yang paling populer digunakan saat ini adalah Hibernate dan Oracle TopLink. Framework ini dinamakan JPA (Java Persisitence API) yang merupakan bagian standar dari Java Enterprise Edition (J2EE) That’s all for today, folks! Selamat, Anda telah menyelesaikan sebuah topik penting di Java yaitu pengaksesan Database. Setelah mengikuti kuliah ini, Anda diharapkan mampu: Memahami penggunaan JDBC Melakukan koneksi ke MySQL Melakukan pemrosesan database Mengetahui framework penyimpanan data (persistence) yang lebih canggih dari JDBC yaitu JPA