Skip navigation

Tag Archives: database


Setelah di postingan sebelumnya menjelaskan tentang cara penggunaan CJuiAutoComplete secara sederhana, postingan ini akan mencoba menyambungkan autocomplete tersebut dengan database.

Read More »


Biar saya tidak lupa. Sekarang saya menggunakan fitur geospatial dari MySQL yang menyediakan fitur geospatial indexing. Dengan fitur ini, saya bisa menyimpan data-data berupa lokasi pada bumi (dengan menggunakan latitude dan longitude) dan bisa melakukan kueri berdasarkan posisi sebuah lokasi.

Tapi meskipun ada banyak fitur-fitur kueri berdasarkan lokasi yang disediakan oleh MySQL, sayangnya tidak ada fungsi bawaan untuk mencari lokasi-lokasi dalam jarak tertentu. Dari referensi (lihat di bagian paling bawah tulis) saya mendapatkan kode di bawah ini. Kode ini merupakan implementasi fungsi haversine.

DELIMITER $$
 CREATE FUNCTION distance (a POINT, b POINT) RETURNS double DETERMINISTIC
   BEGIN
     RETURN 6371 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(ABS(X(a)) - ABS(X(b)))), 2) + COS(RADIANS(ABS(X(a)))) * COS(RADIANS(ABS(X(b)))) * POWER(SIN(RADIANS(Y(a) - Y(b))), 2)));
   END  $$
DELIMITER ;

*update* Saat menulis ini merasa agak aneh dengan fungsi di atas, karena fungsi di atas sama sekali tidak memerlukan geospatial indexing. Ternyata ada alternatif yang menggunakan geospatial indexing yakni seperti di bawah.

DELIMITER $$
 CREATE FUNCTION distance (a POINT, b POINT) RETURNS double DETERMINISTIC
  BEGIN
  RETURN GLength(
   LineStringFromWKB(
     LineString(
       a, b
     )
   )
 ) * 100;
  END  $$
DELIMITER ;

Dan data-data lokasi dalam jarak tertentu (dalam satuan kilometer) dari sebuah titik dapat didapatkan dengan kueri seperti di bawah. Voila!

SELECT id, name, latitude, longitude, distance(coordinate, POINT(-6.890469, 107.610244)) AS cdist
FROM Locations
HAVING cdist < 10
ORDER BY cdist LIMIT 10;

Referensi utama dari blog ini dapat dilihat di


*Maaf baru posting setelah sekian lama*

Sekarang saya akan mencoba membuat kelas Entity Persistence pada project yang pernah diposting sebelum ini. Pada proyek itu telah dibuat Persistence Unitnya.
Read More »


Persistence Unit adalah sebuah unit data yang menjelaskan konfigurasi entity yang digunakan. Salah satu konfigurasinya berisi tentang storage tempat entity disimpan. Cara menambahkan PersistenceUnit pada sebuah Java project di Netbeans adalah sebagai berikut

Read More »


Secara default, MySQL di XAMPP menyertakan fitur InnoDB meski tidak otomatis dijalankan. InnoDB adalah database engine yang memiliki banyak sekali kelebihan. Untuk dapat mengkonfigurasi InnoDB di XAMPP lakukan beberapa langkah berikut

  • Buka berkas my.cnf di folder xampp\mysql\bin
  • Cari kalimat “skip-innodb”
  • Beri tanda “#” didepan baris tersebut
  • Kemudian hapus tanda “#” di beberapa baris di bawah “# Uncomment the following if you are using InnoDB tables”

Persistence adalah sebuah fitur yang mampu melakukan mapping object ke relasional. Dengan adanya fitur ini maka kita bisa dengan mudah melakukan pengembangan objek dengan menggunakan basisdata tanpa harus mengkodekan koneksi manual ke database. Kemaren gw baru nyobain fitur persistence itu untuk Java EE dengan menggunakan Netbeans dan MySQL.

Ceritanya gw bikin sebuah table namanya products

CREATE TABLE `product` (
`ID` VARCHAR( 8 ) NOT NULL ,
`Name` TEXT NOT NULL ,
`Price` INT NOT NULL ,
`Quantity` INT NOT NULL ,
PRIMARY KEY ( `ID` )
) ENGINE = MYISAM ;

Untuk melakukan manajemennya bisa dilihat di sini.
Nantinya akan keluar
mysql1

Setelah itu kita bikin aplikasi berbasis Java EE, entah itu Enterprise app atau sekadar Web app.
Nah kita langsung coba bikin Class dari database.

mysql2

Setelah itu tinggal ikutin langkah-langkah aja.

mysql3

Kita pilih data source yang diperlukan…. Terus abis itu kita pilih table-table yang dibutuhkan juga… Dan nanti masing-masing table akan menjadi sebuah class.

mysql4

Nah nantinya kita akan punya sebuah class Product. (Nama product terpaksa direname sendiri karena pada table biasanya menggunakan nama plural sedangkan nama class biasanya singular)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Petra Barus
 */
@Entity
@Table(name = "products")
@NamedQueries({@NamedQuery(name = "Product.findAll", query = "SELECT p FROM Product p"), @NamedQuery(name = "Product.findById", query = "SELECT p FROM Product p WHERE p.id = :id"), @NamedQuery(name = "Product.findByPrice", query = "SELECT p FROM Product p WHERE p.price = :price"), @NamedQuery(name = "Product.findByQuantity", query = "SELECT p FROM Product p WHERE p.quantity = :quantity")})
public class Product implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID")
    private String id;
    @Basic(optional = false)
    @Lob
    @Column(name = "Name")
    private String name;
    @Basic(optional = false)
    @Column(name = "Price")
    private int price;
    @Basic(optional = false)
    @Column(name = "Quantity")
    private int quantity;

    public Product() {
    }

    public Product(String id) {
        this.id = id;
    }

    public Product(String id, String name, int price, int quantity) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Product)) {
            return false;
        }
        Product other = (Product) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "model.Product[id=" + id + "]";
    }

}

Menyambung tulisan dari Bung Aqsath mengenai pengenalan OOP di PHP, gw ada sedikit tambahan yang menarik yakni mengenai konsep ORM.

ORM atau Object Relational Mapping adalah teknik yang menghubungkan basisdata relasional dengan konsep OOP. Dengan menggunakan ORM kita dapat dengan mudah mempertahankan persistensi objek pada database. Kita dapat melakukan pembuatan obyek dan manipulasi-manipulasinya sembari mempertahankan isi data pada database yang direpresentasikan oleh objek tersebut.

Teknik ini sudah banyak sekali diimplementasikan diframework-framework seperti KohanaPHP, Symfony, CakePHP, dll.

Read More »

%d blogger menyukai ini: