kapan perlu pake JDBC dan kapan pake ORM (hibernate, jpa)?


#TanyaJava

kapan perlu pake JDBC dan kapan pake ORM (hibernate, jpa)?

jawabannya sih relatif, suka2 yang coding. tapi pasti ada alasan dibalik coder pilih pake jdbc atau orm seperti hibernate atau jpa.

kapan perlu pake jdbc? saat memang kita sangat ketergantungan sama fasilitas database, contohnya, store procedure, trigger, dan fungsi2 bawaan databasenya. hal ini akan sangat sulit dilakukan di orm. pake jdbc juga dengan ketentuan, sampai kapanpun gak akan pernah ganti database, karena kalo sampai ganti, berarti harus rewrite ulang seluruh perintah sql nya.

kapan perlu pake orm? saat memang kita gak terlalu butuh fitur2 bawaan database, orm saat ini hanya bisa perintah sql standar (insert, update, delete, select, create table), untuk membuat trigger, function dan store procedure, belum bisa, walaupun ada beberapa orm yang mampu, hanya memanggil store procedure saja. salah satu kelebihan orm, kita mudah ganti2 database, karena memang seluruh perintah sql nya di lakukan oleh orm.

tapi orm itu lambat? selambat2nya bukan berarti operasi jdbc itu 1 detik, orm itu 1 menit  perbedaan kecepatan paling hanya beberapa milisecond, dan itu seperti kedipan mata, jadi gak berpengaruh juga  apalagi semakin kesini hardware semakin canggih, jadi kecepatan milisecond benar2 gak kan kerasa.

sekian, follow juga twitter kita di @PakarJava

apa bedanya statement dan prepare-statement dalam jdbc?


#TanyaJava

apa bedanya statement dan prepare-statement dalam jdbc?

#statement merupakan objek untuk manipulasi data di jdbc, namun tidak mendukung parameter, pembuatan parameter secara manual di statement bisa menyebabkan sql injection, statement disarankan hanya untuk perintah sql tanpa parameter.

#prepareStatement merupakan objek untuk manipulasi data di jdbc yang mendukung parameter, prepare-statement menjamin parameter yang dimasukkan tidak akan dapat menyebabkan sql injection

#contoh SQL INJECTION :

String username = …
String password = …

String sql = “select * from table_user where username = ‘” + username + “‘ and password = ‘” + password + “‘”;

jika
username = “admin”, dan
password = “admin or ‘A’ = ‘A”

maka hasilnya :

sql = “select * from table_user where username = ‘admin’ and password = ‘admin’ or ‘A’ = ‘A'”

dengan begitu orang bisa login, tanpa harus memasukkan username dan password yang benar.

BAHAYA BUKAN?

PRE-ORDER Video Tutorial Java Database dan Java GUI


Temen-temen yang tertarik untuk belajar tentang Java Database dan Java GUI, video tutorial saya yang berjudul :

  • Pemrograman Database Menggunakan Java dan MySQL
  • Pemrograman GUI Menggunakan Java dan NetBeans

Sudah bisa di pre-order lewat website StripBandunk. Video tutorial tersebut akan siap di kirim pada tanggal 20 Maret 2012, jadi jangan sampai kelewat 😀 Rugi tar 😀 heheheh

Servlet 3 – Menyimpan Data ke Database MySQL Menggunakan JDBC


Pada artikel ini, saya menulis artikel tentang cara menyimpan data ke database MySQL menggunakan JDBC melalui servlet 3. Hal pertama yang perlu dilakukan adalah membuat database dan tabel di MySQL.

create database belajar;

use belajar;

create table barang(
     id integer primary key auto_increment,
     nama varchar(100) not null,
     harga_beli integer not null,
     harga_jual integer not null
)type=InnoDB;

Selanjutnya buatlah koneksi ke database yang telah dibuat, kita akan menggunakan WebListener untuk membuat koneksi tersebut.

package khannedy.web.listener;

import java.sql.Connection;
import java.sql.DriverManager;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ConnectionListener implements ServletContextListener {

    public static final String CONNECTION_KEY = "your_connection_key";

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/belajar", "root", "root");
            sce.getServletContext().setAttribute(CONNECTION_KEY, connection);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        try {
            Connection connection = (Connection) sce.getServletContext().getAttribute(CONNECTION_KEY);
            connection.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

Setelah itu buat halaman HTML untuk menampung input data yang akan dikirim ke servlet

<!doctype html>
<html>
    <head>
        <title>Menambah Data</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Tambah Data Barang</h1>
        <form method="post" action="SaveData">
            <table>
                <tbody>
                    <tr>
                        <td>Nama</td>
                        <td><input type="text" name="nama"/></td>
                    </tr>
                    <tr>
                        <td>Harga Beli</td>
                        <td><input type="text" name="harga_beli"/></td>
                    </tr>
                    <tr>
                        <td>Harga Jual</td>
                        <td><input type="text" name="harga_jual"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="Process"/></td>
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>

Setelah itu, buat servlet dimana digunakan untuk melakukan proses simpan data ke database MySQL.

package khannedy.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import khannedy.web.listener.ConnectionListener;

@WebServlet(name = "SaveData", urlPatterns = {"/SaveData"})
public class SaveDataServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
            Connection connection = (Connection) getServletContext().getAttribute(ConnectionListener.CONNECTION_KEY);

            String sql = "insert into barang (nama, harga_beli, harga_jual) values (?, ?, ?);";

            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1, request.getParameter("nama"));
            statement.setInt(2, Integer.parseInt(request.getParameter("harga_beli")));
            statement.setInt(3, Integer.parseInt(request.getParameter("harga_jual")));
            statement.executeUpdate();
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet SaveDataServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Berhasil Menambah Data Barang</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

Hasilnya :

Screenshot-Menambah Data - Google Chrome

Screenshot-Menambah Data - Google Chrome

Screenshot-Servlet SaveDataServlet - Google Chrome

Screenshot-Servlet SaveDataServlet - Google Chrome

Screenshot-echo@echo-ubuntu: ~ - Terminal

Screenshot-echo@echo-ubuntu: ~ - Terminal

Download Buku MySQL dan Java Database Connectivity


 

MySQL dan Java Database Connectivity

MySQL dan Java Database Connectivity

 

Silahkan download bukunya disini :

https://eecchhoo.wordpress.com/buku/

Selamat Belajar…

Menyimpan Berkas BLOB ke Database Menggunakan Java Database Connectivity


Java Programming

Java Programming

Tadi pagi ada yang SMS, gimana cara menyimpan data berkas ke database dengan tipe kolom BLOB. Hal ini mungkin berguna, saat misal kita akan menyimpan gambar photo karyawan di database, jadi photonya tidak disimpan di hardisk, tapi langsung di database, atau juga menyimpan data dokumen word atau excel langsung ke database. Caranya cukup mudah 😀 Baca lebih lanjut

Membuat Laporan yang Multi-Database dan Multi-Persistence Menggunakan JasperReport


Sudah tau tentang JasperReport kan?

Jika belum itu tandanya anda kurang pergaulan 🙂 , sudah pasti setiap developer Java mengetahui tentang JasperReport, khususnya yang bercimpung di dunia Sistem Informasi. Kenapa? Karena dimana ada Sistem Informasi, disitu pula pasti ada yang namanya Laporan, yup bagi yang belum tau, JasperReport adalah framework untuk membuat laporan di Java.

Saat ini kebanyakan orang menggunakan SQL dan teman-temannya dalam membuat laporan, kenapa? Karena memang mudah 😀

Tapi tahukan Anda kalo banyak sekali perbedaan perintah SQL setiap Sistem Basis Data? Misal di MySQL memiliki perintah LIMIT untuk membatasi banyak record yang ditemukan, sedangkan di ORACLE tidak ada perintah LIMIT 😦

Hal ini bisa berakibat kita perlu membuat ulang laporan yang sudah dibuat jika kita akan melakukan migrasi dari satu Sistem Basis Data ke Sistem Basis Data yang lainnya 😦 #capedeh

Tapi tenang saja, setelah membaca tutorial ini Anda tidak perlu khawatir lagi soal gonta-ganti SQL di laporan yang anda buat 😀 Baca lebih lanjut

Logging dalam Java, Apa dan Kenapa?


Logging? Penebangan? Haha, bukan itu maksudnya 😀

Logging yang dimaksud disini adalah cara yang sistematis dan terkendali untuk merepresentasikan keadaan tahapan-tahapan aplikasi pada saat aplikasi tersebut berjalan. Hmmm…. maksudnya? 😀

Sederhananya seperti ini, biasanya saat kita ingin mendeteksi apa yang terjadi dalam program, biasanya kita menampilkan tulisan pada console dengan perintah :

System.out.println(“isi informasi”);

misal, kita membuat program penjualan, biasanya agar kita mengetahui apa yang terjadi dalam program kita menyelipkan informasi logging seperti :

“membuat barang baru”
“barang baru berhasil dibuat”
“mengambil data barang dari database”

dan sebagainya, sesuai dengan yang kebutuhan kita 😀 Hal inilah yang dinamakan logging, artinya logging ini cara yang biasa kita gunakan untuk merepresentasikan keadaan tahapan-tahapan aplikasi yang sedang berjalan, tujuan dilakukan proses logging ini tentunya agar kita tau apa yang terjadi dalam program, sehingga jika ada kesalahan dalam program kita bisa mengetahuinya 😀

Kenapa Perlu Teknologi Lain?

kalo kita bisa menggunakan logging menggunakan perintah System.out.println(), kenapa kita perlu teknologi yang lainnya?

hal ini dikarenakan target untuk System.out.println() adalah console, artinya jika kita membuat program yang berbasiskan antarmuka, maka hasil dari System.out.println() tidak akan terlihat 😀 Hal ini karena memang kita tidak menggunakan console 😀

hal ini bisa kita akali dengan cara menggunakan Java IO, sehingga kita tidak menggunakan System.out.println() lagi, melainkan menggunakan Java IO, tapi itu artinya kita harus membuat proses logging yang baru lagi 😦

atau jika kita ingin seluruh proses logging ditampilkan dalam database, maka artinya kita harus menggunakan JDBC, dan artinya lagi-lagi kita harus buat proses logging dari awal lagi 😦

hal ini membuat proses logging secara manual seperti ini sangat melelahkan…. oleh karena itu kita perlu teknologi lain untuk proses logging, namanya Java Logging!

Java Logging

java logging merupakan teknologi logging yang secara default ada dalam jdk, sehingga tidak perlu menginstall plugin atau framework apapun untuk menggunakannya. seluruh class-class java logging terdapat pada paket java.util.logging.*

secara sederhana, java logging dapat digambarkan sebagai jembatan penghubung antara aplikasi dan target lokasi logging, artinya hanya dengan menggunakan java logging, kita dapat dengan mudah mengubah target loggingnya, misal kita ingin menjadikan console sebagai target loggingnya, artinya seluruh trace logging akan ditampilkan dalam console. atau kita ingin target loggingnya ke file, maka seluruh trace logging akan disimpan dalam file. selain itu kita juga dapat menggunakan target target yang berbeda secara bersamaan menggunakan java logging.

Java Logging

Java Logging

dengan fasilitas java logging yang seperti itu, maka proses logging akan sangat menyenangkan 😀 tidak lagi membosankan dan tidak akan memakan waktu lama 😀

Ingat! Tuliskan Seluruh Informasi Yang Diperlukan Pada Saat Membuat Logging, Agar Kita Tahu Apa Yang Sedang Terjadi Dengan Aplikasi Kita

Praktek!

misal saja kita membuat program yang sederhana, yaitu melakukan perulangan 0 sampai 9 😀

package khannedy.standard.logging;

import java.util.logging.Logger;

public class SimpleLogging {

	public static void main(String[] args) {
		Logger logger = Logger.getLogger("Eko Keren :D");
		logger.info("aplikasi berjalan");

		logger.info("melakukan perulangan");
		for (int i = 0; i < 10; i++) {
			logger.info("nilai i sekarang " + i);
		}
		logger.info("perulangan selesai");

		logger.info("aplikasi selesai");
	}

}

untuk membuat logger, caranya kita menggunakan kelas java.util.logging.Logger dengan menggunakan static class getLogger(“nama logger”). Dan untuk menampilkan informasi kita bisa menggunakan metode info(“informasi”), atau untuk menampilkan warning kita bisa menggunakan metode warning(“warning”) dan yang lainnya.

jika dijalankan, maka hasil programnya adalah :

May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: aplikasi berjalan
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: melakukan perulangan
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 0
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 1
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 2
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 3
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 4
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 5
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 6
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 7
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 8
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 9
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: perulangan selesai
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: aplikasi selesai

secara default target lokasinya adalah console, tapi anda bisa merubahnya dengan cara mengubah Handler-nya :

package khannedy.standard.logging;

import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Logger;

public class SimpleLogging {

	public static void main(String[] args) throws Exception {
		Logger logger = Logger.getLogger("Eko Keren :D");

		Handler handler = new FileHandler("file-log.log");
		logger.addHandler(handler);

		logger.info("aplikasi berjalan");

		logger.info("melakukan perulangan");
		for (int i = 0; i < 10; i++) {
			logger.info("nilai i sekarang " + i);
		}
		logger.info("perulangan selesai");

		logger.info("aplikasi selesai");
	}

}

dimana java logging support beberapa handler, yaitu :

  1. java.util.logging.FileHandler, ini menulis logging ke file
  2. java.util.logging.ConsoleHandler, ini menulis logging ke console
  3. java.util.logging.StreamHandler, ini menulis logging ke stream
  4. java.util.logging.MemoryHandler, ini menulis logging ke memory
  5. java.util.logging.SocketHandler, ini menulis logging ke jaringan socket menggunakan protokol TCP/IP.

bagaimana kalo kita ingin logging nya disimpan ke database?

kita bisa membuat class logging sendiri, dengan cara membuat class turunan baru dari class java.util.logging.Handler

😀