Pemrograman Qt 23 – Koneksi Database MySQL


Bismillahirrahmanirrahim.

qt-creator-logoKali ini kita akan memrogram aplikasi sederhana dengan koneksi ke database MySQL di Linux. Program kali ini hanya akan bekerja seminimal mungkin yaitu login ke database (mendemonstrasikan MySQL driver di Qt) kemudian mengambil sejumlah data (informasi koneksi maupun konten tabel dari database). Program ini adalah dasar bagi program-program database lain yang akan dibuat. Seri ini untuk pertama kalinya memuat komponen baru Daftar Header karena hal ini penting. Tulisan seri 23 ini dibuat setelah seri 22 pada 3 Juli 2015 kemarin, serasa sudah satu tahun. Program kali ini bernama Eskiel. Semoga tulisan ini bermanfaat.

Spesifikasi

  1. Ubuntu 12.04
  2. Qt Creator 2.4.1
  3. Qt 4.8

Daftar Header

  1. QtSql/QSqlDatabase: untuk koneksi database.
  2. QtSql/QSqlDriver: untuk driver MySQL.
  3. QtSql/QSqlError: untuk penanganan error database.
  4. QtSql/QSqlQuery: untuk melakukan kueri ke database.
  5. QMessageBox: untuk menayangkan Qt message box.
  6. QDebug: untuk mengeluarkan output setiap aksi ke stdout.

Daftar Kelas

  1. QSqlDatabase
  2. QMessageBox
  3. QSqlQuery

Daftar Method

  1. addDatabase()
  2. setHostName()
  3. setUserName()
  4. setPassword()
  5. setDatabaseName()
  6. information()
  7. critical()
  8. qDebug()
  9. next()
  10. value()
  11. toString()

Arah Tulisan Ini

  1. Melakukan koneksi database ke MySQL.
  2. Menayangkan data dari database ke standard output.

Kode

Eskiel.pro

#-------------------------------------------------
#
# Project created by QtCreator 2015-12-06T19:18:00
#
#-------------------------------------------------

QT += core gui
QT += sql

TARGET = Eskiel
TEMPLATE = app

SOURCES += main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui

mainwindow.cpp

/*
Eskiel
Lisensi GNU GPL v2
Teks lisensi disertakan dalam LICENSE.txt
Hak cipta Ade Malsasa Akbar
Email: teknoloid@gmail.com
Blog: https://malsasa.wordpress.com
Web: http://bengkelubuntu.org
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>
#include <QMessageBox>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// empat baris login dari kode ke arah database; Tuesday, December 08, 2015 06:54 AM;
QSqlDatabase query_sender = QSqlDatabase::addDatabase("QMYSQL");
query_sender.setHostName("localhost");
query_sender.setUserName("root");
query_sender.setPassword("master");
query_sender.setDatabaseName("juanda");

// jika koneksi ke database berhasil, tampilkan dialog QMessageBox bertipe information; Sunday, December 06, 2015 07:48 PM;
if(query_sender.open())
{
QMessageBox::information(0, QObject::tr("Berhasil Konek Database"),
"Nama driver kita adalah: "+query_sender.driverName()+"\nNama koneksi kita adalah: "
+query_sender.connectionName());
}

// jika koneksi ke database gagal, tampilkan dialog QMessageBox bertipe critical; Sunday, December 06, 2015 07:48 PM;
if(!query_sender.open())
{
QMessageBox::critical(0, QObject::tr("Ada Kesalahan Database"), query_sender.lastError().text());
}

// qDebug untuk informasi database; Sunday, December 06, 2015 08:53 PM;
qDebug() << "Tabel kita: " << query_sender.tables();
qDebug() << "Detail database kita: " << query_sender.database();
qDebug() << "Kondisi open database kita (true/false): " << query_sender.open();

// kueri ke arah database dan mengambil data lalu ditampilkan ke stdout; Sunday, December 06, 2015 08:53 PM;
QSqlQuery master("SELECT * FROM pelajaran");
while (master.next())
{
QString kolom_1 = master.value(0).toString();
QString kolom_2 = master.value(1).toString();
QString kolom_3 = master.value(3).toString();
QString kolom_4 = master.value(4).toString();
qDebug() << QString("%1 \t %2 \t\t %3 \t\t %4").arg(kolom_1).arg(kolom_2).arg(kolom_3).arg(kolom_4);
}

}

MainWindow::~MainWindow()
{
delete ui;
}

Qt Creator dan Kode

rootmagz-062015-terbit-15

Hasil

Tahap Pertama

rootmagz-062015-terbit-16

Tahap Kedua

rootmagz-062015-terbit-18

Tahap Ketiga

Tabel kita: ("pelajaran", "perpustakaan", "publishing")
Detail database kita: QSqlDatabase(driver=""QMYSQL"", database=""juanda"", host=""localhost"", port=-1, user=""root"", open=true)
Kondisi open database kita (true/false): true
"1 Psikologi Sosial PT Eresco Bandung 1987"
"2 Kematian Sang Ajal Penerbit Gondret 1999"
"3 Asmaradana PT Gramedia 1992"
"4 Tata Bahasa Baku Bah Yayasan Asih Asah As 1989"
"5 Mempelajari Android Penerbit Canggu 2015"

rootmagz-062015-terbit-17

Analisis

Bagian koneksi database: program ini mengandung kode terpenting yaitu koneksi database MySQL demikian:

    QSqlDatabase query_sender = QSqlDatabase::addDatabase("QMYSQL");
    query_sender.setHostName("localhost");
    query_sender.setUserName("root");
    query_sender.setPassword("master");
    query_sender.setDatabaseName("juanda");

Yang intinya melakukan login ke MySQL lalu meminta database bernama juanda. Empat baris teratas adalah wajib untuk login, baris terakhir sebatas memanggil database saja untuk manipulasinya. Terlihat di atas, method addDatabase() dari kelas QSqlDatabase dipanggil dengan argumen QMYSQL. Method setHostName() menentukan nama host di mana MySQL menyala dan di sini argumennya adalah localhost karena ia ada di komputer saya. Method setUserName() dan setPassword() jelas untuk memasukkan username dan password. Di sini memang root dan master adalah kredensial saya. Method setDatabaseName() berfungsi melakukan SELECT database untuk kegiatan yang akan datang. Semua ini dilakukan pada objek query_sender yang dibuat dari kelas QSqlDatabase. Empat kode utama ini akan selalu dipakai di program koneksi database apa pun.

Bagian pengecekan koneksi: program ini juga berisi pemeriksaan status koneksi database apakah sukses atau gagal, dan selalu akan ditayangkan pesan teknisnya. Cara yang ditempuh adalah dengan memanfaatkan method open() milik kelas QSqlDatabase yang dipasangkan pada objek query_sender. Jika pemakaian query_sender.open() sukses (bernilai 1), maka ditayangkan QMessageBox Berhasil Konek Database seperti hasil pada tahap pertama di atas. Jika pemakaian query_sender.open() gagal (bernilai 0), maka ditayangkan QMessageBox Ada Kesalahan Database seperti hasil pada tahap kedua. Yang terpenting di bagian ini adalah method: driverName(), connectionName(), dan lastError() yang semuanya milik kelas QSqlDatabase berurutan untuk mendapatkan nama driver database, lalu mendapatkan nama koneksinya, lalu mendapatkan pesan error. Hal ini harus dilakukan supaya program menjadi jelas perilakunya karena segala detail kondisinya bisa diketahui.

Bagian kueri: program ini juga harus membuktikan keberhasilkan koneksinya dengan mengambil lalu menayangkan tabel dari database ke standard output. Tidak boleh dia berhenti sebatas pada penayangan status koneksi. Cara melakukan kuerinya dengan membuat objek baru (diberi nama master) dari kelas QSqlQuery dan langsung menetapkan argumen kueri SELECT * FROM pelajaran. Kemudian, dilakukan looping master.next() yang intinya scanning satu per satu record (row/baris) tabel pelajaran. Di dalam satu loop, ada 4 kali pengambilan field (column/kolom) yang dilakukan dengan method value(int index) kemudian 1 kali penayangan standard output semua hasil pengambilan berurutan dengan qDebug serta bantuan QString. Karena looping dilakukan terus menerus, maka semua record (row/baris) akan terkena scanning sampai seisi tabel selesai diambil semua.

Bagian debug: sebenarnya bagian ini bisa digabung dengan QMessageBox, tetapi saya ingin menayangkan informasi ke standard output saja. Method qDebug() (dari Qt Global Declarations) berguna untuk menayangkan pesan dari program ke standard output. Di sini yang ditayangkan adalah konten dari method tables(), database(), dan open() dari kelas QSqlDatabase. Bagian ini mendemonstrasikan betapa bagusnya qDebug() untuk dump informasi program ke standard output.

Kesimpulan

  1. Koneksi database di Qt membutuhkan 4 baris utama dengan kelas QSqlDatabase sebagai pusatnya.
  2. MySQL bisa dikoneksikan dengan driver QMYSQL.
  3. Kueri tabel dari database bisa dilakukan dengan kelas QSqlQuery, method next(), dengan bantuan looping.

Unduh

Program kali ini bernama Eskiel. Silakan unduh dan jalankan di Qt Creator Anda.

8 thoughts on “Pemrograman Qt 23 – Koneksi Database MySQL

  1. Irfan

    Asslamu Alaikum Warahmatulahi Wabarakatuhu,
    Alhamdulilah ketemu situs ini. terus terang saya baru belajar program qt, setelah selesai mengikuti tutorial qt membuat notepad simple ingin dideploy (dibuat paket instalasi) tapi minta dll macam2 yang besar sekali ukuran filenya. Siapa tahu akh ade punya pengalaman membuat paket instalasi dari program qt . atau pertanyaannya mungkin bagaimana membuat paket instalasi dari program qt. Atas bantuannya Jazakumullahu Khaeran..

    Balas
    1. Ade Malsasa Akbar Penulis Tulisan

      Wa’alaykumussalam warahmatullahy wabarakatuh, wa antum jazakallahu khayran.

      Al Akh Irfan hendak mendeploy aplikasi Qt ke mana? Windows atau Linux? Kalau Linux, ana punya tulisannya di sini https://malsasa.wordpress.com/2013/12/25/panduan-pemaketan-debian-termudah-disertai-contoh. Kalau Windows, itu lebih mudah, tetapi ana tidak pernah menulisnya. Barangkali saja deploy yang antum maksud static linking, silakan mencari kata kunci deplot qt static linking windows. Jika ada yang ditanyakan lagi, ana siap membantu in syaa Allah baik di sini atau via email teknoloid@gmail.com. Antum jangan sungkan-sungkan.

      Balas
  2. Irfan

    Masya Allah langsung di balas, untuk bisa duanya – duanya, lalu apakah hasil deploy ukurannya sebesar karena butuh dll yang macam2.

    Balas
    1. Ade Malsasa Akbar Penulis Tulisan

      Ini antum menanyakan perbedaan static linking dengan dynamic linking ya, Akh? Di GNU/Linux, kita ada yang namanya pemaketan. Aplikasi didistribusikan dalam paket, di dalam paket itu disebutin dependensinya apa saja. Kalau pengguna menginstal, mereka otomatis juga menginstal dependensi itu. Bagaimana, apa ini yang diinginkan?

      Balas

Dilarang menggunakan emotikon

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s