Dasar-Dasar DBI dan RSQLite
Hubungkan ke database SQLite, jalankan kueri, dan ambil hasilnya dengan DBI.
Dasar-Dasar DBI dan RSQLite adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Mengakses Basis Data di R dengan DBI
Paket DBI menyediakan antarmuka terpadu untuk mengakses basis data di R. Fungsi yang sama dapat digunakan di berbagai backend basis data (SQLite, PostgreSQL, MySQL, dan sebagainya) dengan memasangkan DBI dengan paket pengandar backend. RSQLite adalah backend yang paling mudah diakses — tidak memerlukan instalasi server.
library(DBI)
library(RSQLite)
# DBI + RSQLite: connect to an in-memory SQLite database
# ':memory:' creates a fresh database in RAM
con <- dbConnect(RSQLite::SQLite(), ':memory:')
cat('Connection class:', class(con), '\n')
cat('Database backend:', dbGetInfo(con)$dbname, '\n')
# Always close connection when done
dbDisconnect(con)
cat('Connection closed.')dbConnect() — Membuat Koneksi
dbConnect(drv, ...) membuat koneksi basis data. Argumen pertama adalah objek pengandar. Untuk SQLite: RSQLite::SQLite(). Argumen tambahan (seperti jalur file basis data) bergantung pada backend.
library(DBI)
library(RSQLite)
# In-memory database (disappears when connection closes)
con_mem <- dbConnect(RSQLite::SQLite(), ':memory:')
# File-based SQLite database (persists to disk)
# con_file <- dbConnect(RSQLite::SQLite(), '/tmp/mydb.sqlite')
# Always wrap connections in tryCatch or use on.exit()
on.exit(dbDisconnect(con_mem))
cat('Connected! Is valid:', dbIsValid(con_mem))dbWriteTable() — Memuat Data ke Basis Data
dbWriteTable(con, 'table_name', df) membuat tabel dan memuat kerangka data ke dalamnya. Tetapkan overwrite=TRUE untuk mengganti tabel yang sudah ada, atau append=TRUE untuk menambahkan baris ke tabel yang sudah ada.
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
# Load a data frame into the database
students <- data.frame(
id = 1:5,
name = c('Alice','Bob','Carol','Dave','Eve'),
score = c(85, 92, 78, 88, 95)
)
dbWriteTable(con, 'students', students)
# Verify: list tables
cat('Tables in DB:', dbListTables(con), '\n')
dbDisconnect(con)dbListTables() dan dbListFields()
dbListTables(con) mengembalikan nama semua tabel dalam basis data yang terhubung. dbListFields(con, 'table') mengembalikan nama kolom dari tabel tertentu. Gunakan fungsi ini untuk menjelajahi basis data yang belum dikenal.
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con, 'students', data.frame(id=1:3, name=c('A','B','C'), score=c(80,90,85)))
dbWriteTable(con, 'courses', data.frame(code=c('R101','R201'), title=c('Intro','Advanced')))
cat('Tables:', paste(dbListTables(con), collapse=', '), '\n')
cat('Students fields:', paste(dbListFields(con, 'students'), collapse=', '), '\n')
dbDisconnect(con)dbGetQuery() — Menjalankan SQL dan Mengembalikan Data
dbGetQuery(con, sql) menjalankan kueri SELECT dan mengembalikan hasilnya sebagai kerangka data. Ini adalah fungsi utama untuk membaca data dari basis data. Fungsi ini menggabungkan dbSendQuery() + dbFetch() + dbClearResult() dalam satu langkah.
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con, 'students',
data.frame(id=1:5, name=c('Alice','Bob','Carol','Dave','Eve'),
score=c(85,92,78,88,95)))
# Run SQL and get results as data frame
high_scorers <- dbGetQuery(con,
'SELECT name, score FROM students WHERE score >= 88 ORDER BY score DESC'
)
print(high_scorers)
dbDisconnect(con)dbFetch() — Mengambil Hasil dalam Potongan
Untuk kumpulan hasil yang besar, gunakan pendekatan tiga langkah: dbSendQuery() mengirim kueri, dbFetch(con, n=1000) mengambil potongan sebanyak n baris, dan dbClearResult() melakukan pembersihan. Cara ini mengendalikan penggunaan memori untuk tabel besar.
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con, 'data', data.frame(x=1:100, y=rnorm(100)))
# Three-step approach for chunked reading
rs <- dbSendQuery(con, 'SELECT * FROM data WHERE x <= 5')
chunk <- dbFetch(rs, n=3) # Get first 3 rows
cat('Rows fetched so far:', nrow(chunk), '\n')
print(chunk)
dbClearResult(rs) # Always clear!
dbDisconnect(con)dbExecute() — Menjalankan SQL selain SELECT
dbExecute(con, sql) menjalankan SQL yang mengubah data (INSERT, UPDATE, DELETE, CREATE, DROP) dan mengembalikan jumlah baris yang terpengaruh. Gunakan fungsi ini untuk operasi DDL dan DML yang tidak mengembalikan baris.
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con, 'students',
data.frame(id=1:4, name=c('Alice','Bob','Carol','Dave'), score=c(85,92,78,88)))
# Update a record
rows_affected <- dbExecute(con,
'UPDATE students SET score = 95 WHERE name = \'Alice\''
)
cat('Rows updated:', rows_affected, '\n')
# Verify
print(dbGetQuery(con, 'SELECT * FROM students WHERE name = \'Alice\''))
dbDisconnect(con)dbExistsTable() dan dbRemoveTable()
dbExistsTable(con, 'name') memeriksa apakah suatu tabel ada (mengembalikan TRUE/FALSE). dbRemoveTable(con, 'name') menghapus tabel. Fungsi ini berguna untuk penyiapan dan pembongkaran yang aman dalam skrip yang mungkin dijalankan berkali-kali.
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
cat('Before: exists?', dbExistsTable(con, 'results'), '\n')
dbWriteTable(con, 'results', data.frame(x=1:3, y=4:6))
cat('After write: exists?', dbExistsTable(con, 'results'), '\n')
dbRemoveTable(con, 'results')
cat('After remove: exists?', dbExistsTable(con, 'results'), '\n')
dbDisconnect(con)dbDisconnect() — Menutup Koneksi
Selalu tutup koneksi basis data dengan dbDisconnect(con) setelah selesai. Koneksi yang terbuka menggunakan memori dan penangan file. Gunakan on.exit(dbDisconnect(con)) di dalam fungsi untuk menjamin pembersihan meskipun terjadi error.
library(DBI)
library(RSQLite)
# Safe connection pattern using on.exit()
safe_query <- function(query) {
con <- dbConnect(RSQLite::SQLite(), ':memory:')
on.exit(dbDisconnect(con)) # Runs even if error!
dbWriteTable(con, 'data', data.frame(x=1:5, y=6:10))
dbGetQuery(con, query)
}
result <- safe_query('SELECT * FROM data WHERE x > 3')
print(result)Memuat mtcars ke SQLite
Contoh praktis: muat kumpulan data bawaan mtcars ke SQLite, lalu jalankan kueri SQL terhadapnya. Contoh ini menunjukkan seluruh alur kerja DBI dan memungkinkan Anda berlatih SQL dari R.
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
# Load mtcars into the database
dbWriteTable(con, 'cars', mtcars, overwrite=TRUE)
# SQL query
result <- dbGetQuery(con, '
SELECT cyl,
COUNT(*) AS n,
ROUND(AVG(mpg), 1) AS avg_mpg,
ROUND(AVG(hp), 0) AS avg_hp
FROM cars
GROUP BY cyl
ORDER BY cyl
')
print(result)
dbDisconnect(con)Ringkasan Alur Kerja DBI
Alur kerja DBI mengikuti pola yang konsisten terlepas dari backend basis data: Hubungkan → Muat/Kueri → Putuskan. Kode yang sama dapat digunakan untuk SQLite, PostgreSQL, MySQL, dan lainnya dengan mengganti pengandar di dbConnect().
library(DBI)
library(RSQLite)
# Complete DBI workflow
con <- dbConnect(RSQLite::SQLite(), ':memory:')
# 1. Create table
dbWriteTable(con, 'orders',
data.frame(order_id=1:4, customer=c('Alice','Bob','Alice','Carol'),
amount=c(100,200,150,80)))
# 2. Query
totals <- dbGetQuery(con,
'SELECT customer, COUNT(*) orders, SUM(amount) total
FROM orders GROUP BY customer ORDER BY total DESC')
print(totals)
# 3. Clean up
dbDisconnect(con)Pemeriksaan Singkat
Apa perbedaan antara dbGetQuery() dan dbExecute() dalam DBI?
Ringkasan: DBI dan RSQLite
Inti pembelajaran untuk DBI dan RSQLite:
dbConnect(RSQLite::SQLite(), ':memory:')— membuat koneksi SQLite dalam memoridbWriteTable(con, 'name', df)— memuat kerangka data ke tabeldbListTables(con)— mencantumkan tabel;dbListFields(con, 'tbl')— mencantumkan kolomdbGetQuery(con, sql)— menjalankan SELECT dan mengembalikan kerangka datadbFetch(rs, n=1000)— pengambilan dalam potongan untuk hasil besardbExecute(con, sql)— menjalankan INSERT/UPDATE/DELETE/DDLdbDisconnect(con)— selalu menutup koneksi; gunakanon.exit()dalam fungsi- DBI dapat digunakan dengan PostgreSQL, MySQL, BigQuery, dan lainnya dengan mengganti pengandar
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ':memory:')
on.exit(dbDisconnect(con))
dbWriteTable(con, 'scores',
data.frame(student=c('Alice','Bob','Carol'), score=c(85,92,78)))
dbExecute(con, 'UPDATE scores SET score = score + 5 WHERE score < 80')
dbGetQuery(con, 'SELECT * FROM scores ORDER BY score DESC')Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar DBI dan RSQLite” gratis?
Ya — teks lengkap “Dasar-Dasar DBI dan RSQLite” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar DBI dan RSQLite”?
Hubungkan ke database SQLite, jalankan kueri, dan ambil hasilnya dengan DBI. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Dasar-Dasar DBI dan RSQLite” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar DBI dan RSQLite
- Menghubungkan ke PostgreSQL dan MySQL
- dbplyr: SQL melalui Sintaks dplyr
- Kueri Berparameter dan Transaksi