Skip navigation

Tag Archives: MySQL


Just drop this again..

at first I’m using awk, but turns out there is pr command.

Source: Stackoverflow.


Snippet yang lumayan kepake ini

SELECT *
    INTO OUTFILE '/tmp/table.csv'
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        ESCAPED BY ‘\\’
        LINES TERMINATED BY '\n'
    FROM table

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 »


Didedikasikan buat rekan-rekan IF ITB 2006.

Ada sedikit permintaaan dari beberapa junior supaya saya sedikit mengupas tentang aplikasi medis sederhana di Java EE. Aplikasi ini cuman aplikasi pengaturan dokter, pasien, dan pemeriksaan. Aplikasi ini akan dibangun dengan menggunakan basis data MySQL dan IDE Netbeans.classdiagram

Read More »


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 + "]";
    }

}

Kalau dulu pernah gw tulis mengenai cara menggunakan MySQL C API pada Netbeans C/C++, maka sekarang pengen nulis tentang melakukan koneksi MySQL pada Servlet. Pada dasarnya menggunakan koneksi MySQL pada pemrograman web berbasis Java tidak berbeda dengan melakukan koneksi MySQL pada pemrograman aplikasi desktop biasa. Untuk melakukan koneksi dari Java, MySQL menyediakan sebuah library bernama Connector/J.

Read More »


Selain sebagai IDE pemrograman, Netbeans mempunyai fasilitas untuk melakukan manajemen basis data. Pada Netbeans 6.5.1, kita diberikan opsi untuk melakukan instalasi Glassfish sebagai web server untuk Java EE. Salah satu keuntungan penggunaan Glassfish adalah fitur Java DB yang sudah terintegrasi di dalam Glassfish. Netbeans memberikan fitur untuk melakukan manajemen web server dan DBMS tersebut secara terintegrasi.

Meski demikian, dengan menggunakan Netbeans kita juga dapat melakukan manajemen web server dan DBMS yang telah terinstal sebelumnya. Kali ini akan diberikan contoh manajemen DBMS MySQL yang sudah terinstal pada paket XAMPP.

Read More »


Untuk proses pengumpulan tugas besar II Pemrograman Internet, gw sengaja bikin sistem yang bisa mendeploy langsung hasil pekerjaan peserta. Peserta kuliah wajib mengarsipkan pekerjaannya dalam format Zip. Kemudian untuk membuat databasenya, saya wajibkan peserta untuk menyertakan berkas bernama database.sql yang berisi dump dari basisdata yang digunakan. Peserta juga diwajibkan menggunakan koneksi basisdata dengan nama pengguna, sandi, dan nama basisdata yang sudah ditentukan.

Permasalahannya adalah bagaimana memasukkan dump pada berkas tersebut ke dalam basis data.

Salah satu caranya adalah dengan menggunakan fungsi exec atau system. Dengan menggunakan perintah ini kita dapat langsung mengeksekusi lewat command line.

$commandline = "mysql -h localhost -u $username -p$password $databasename -e \"source $databasepath\"";
system($commandline);

MySQL memberikan argumen -e untuk mengeksekusi sebuah perintah kemudian keluar dari aplikasi. Dengan demikian kita hanya butuh memasukkan perintah “source” lewat argumen tersebut.

Selain itu ada cara yang sedikit naif, yakni dengan melakukan parsing terhadap berkas dan mengeksekusi satu persatu.

$fd = fopen($databasepath, 'r');
$read = fread($fd, filesize($databasepath));
$queries = explode(';', $read);
foreach($queries as $query)
    mysql_query($query);

Berkas akan diparsing berdasarkan keberadaan karakter ‘;’ yang menunjukkan batas antara sebuah klausa dengan klausa yang lain. Dan,Voila! Cukup dengan perintah explode klausa akan langsung dimasukkan ke dalam array untuk dieksekusi satu per satu.


Lumayan hasil bebersih folder tugas progin tahun lalu. Ada class wrapper buat koneksi database MySQL 😛

<?php

class database {
    var $database_host;
    var $database_user;
    var $database_pswd;
    var $database_name;
    var $database_link;
    var $last_result;

    function mysql($database_host, $database_user, $database_pswd, $database_name){
        $this->database_host = $database_host;
        $this->database_user = $database_user;
        $this->database_pswd = $database_pswd;
        $this->database_name = $database_name;
        $this->database_link = mysql_connect($this->database_host, $this->database_user, $this->database_pswd) or die("<strong>Could not connect to database</strong> : ".mysql_error());
        mysql_select_db($this->database_name, $this->database_link) or die("<strong>Could not select database</strong>".mysql_error());
    }

    function query($query_string){
        $result = mysql_query($query_string, $this->database_link);
        if(!$result) {
            return false;
        } else {
            return $result;
        }
    }

    function fetch_assoc($result){
        return mysql_fetch_assoc($result);
    }

    function rows_affected($result){
        return mysql_rows_affected($result);
    }    

    function num_rows($result){
        return mysql_num_rows($result);
    }
}
//end of file

well, sekarang udah ada yang namanya framework. Bener-bener menyenangkan.

%d blogger menyukai ini: