Pemrograman SQLite di C Tutorial Two

Tutorial ini adalah seri kedua pemrograman SQLite dalam C.

SQLite menyimpan koleksi tabel dalam satu file basis data, biasanya berakhiran .db. Setiap tabel seperti spreadsheet, terdiri dari sejumlah kolom dan setiap baris memiliki nilai.

Jika ini membantu, anggaplah setiap baris sebagai a struct, dengan kolom dalam tabel sesuai dengan bidang dalam struct.

Sebuah tabel dapat memiliki baris sebanyak yang sesuai pada disk. Ada batas atas tetapi tepat 18.446.744.073.709.551.616 tepatnya.

Sebuah tabel dapat memiliki hingga 2.000 kolom atau jika Anda mengkompilasi ulang sumbernya, Anda dapat memaksimalkannya menjadi 32.767 kolom yang luar biasa.

API SQLite

Untuk menggunakan SQLite, kita perlu membuat panggilan ke API. Anda dapat menemukan pengantar API ini di resmi Pengantar Antarmuka SQLite C / C ++ halaman web. Ini adalah kumpulan fungsi dan mudah digunakan.

Pertama, kita membutuhkan pegangan untuk basis data. Ini adalah tipe sqlite3 dan dikembalikan dengan panggilan ke sqlite3_open (nama file, ** ppDB). Setelah itu, kita jalankan SQL.

instagram viewer

Mari kita menyimpang sedikit dulu dan membuat database yang dapat digunakan dan beberapa tabel menggunakan SQLiteSpy. (Lihat tutorial sebelumnya untuk tautan ke sana dan Peramban Basis Data SQLite).

Acara dan Tempat

Basis data tentang. DB akan mengadakan tiga tabel untuk mengelola acara di beberapa tempat. Acara-acara ini akan menjadi pesta, disko, dan konser dan akan berlangsung di lima tempat (alpha, beta, charlie, delta, dan echo). Saat Anda memodelkan sesuatu seperti ini, sering kali membantu memulai dengan spreadsheet. Demi kesederhanaan, saya hanya akan menyimpan kencan bukan waktu.

Spreadsheet memiliki tiga kolom: Tanggal, Tempat, Jenis Acara, dan sekitar sepuluh acara seperti ini. Tanggal berlaku mulai 21 hingga 30 Juni 2013.

Sekarang SQLite tidak memiliki tipe tanggal yang eksplisit, sehingga lebih mudah dan lebih cepat untuk menyimpannya sebagai int dan cara yang sama dengan Excel menggunakan tanggal (hari sejak 1 Januari 1900) memiliki nilai int 41446 hingga 41455. Jika Anda memasukkan tanggal dalam spreadsheet lalu memformat kolom tanggal sebagai angka dengan 0 tempat desimal, tampilannya seperti ini:

Sekarang kita bisa menyimpan data ini dalam satu tabel dan untuk contoh sederhana seperti itu, itu mungkin bisa diterima. Namun praktik desain database yang baik membutuhkan beberapa normalisasi.

Item data unik seperti jenis venue harus ada di tabelnya sendiri dan tipe acara (pesta, dll) juga harus dalam satu. Akhirnya, karena kita dapat memiliki beberapa jenis acara di banyak tempat, (hubungan banyak ke banyak), kita membutuhkan tabel ketiga untuk menampungnya.

Tiga tabel tersebut adalah:

  • venue - menampung semua lima venue
  • eventtypes - menampung ketiga jenis acara
  • acara - memegang tanggal plus id tempat ditambah id jenis acara. Saya juga menambahkan bidang deskripsi untuk acara ini misalnya "Ulang Tahun Jim".

Dua tabel pertama menampung tipe data sehingga tempat memiliki nama alpha to echo. Saya telah menambahkan id integer juga dan membuat indeks untuk itu. Dengan sejumlah kecil tempat (5) dan jenis acara (3), itu bisa dilakukan tanpa indeks, tetapi dengan tabel yang lebih besar, itu akan menjadi sangat lambat. Jadi, setiap kolom yang kemungkinan akan dicari, tambahkan indeks, sebaiknya bilangan bulat

SQL untuk membuat ini adalah:

Indeks pada tabel acara memiliki tanggal, id-acara, jenis acara, dan tempat. Itu berarti kita dapat meminta tabel acara untuk "semua acara pada tanggal", "semua acara di suatu tempat", "semua pihak" dll dan kombinasi dari semua itu seperti "semua pihak di suatu tempat" dll.

Setelah menjalankan SQL membuat kueri tabel, tiga tabel dibuat. Catatan Saya telah memasukkan semua sql di file teks create.sql dan itu termasuk data untuk mengisi beberapa dari tiga tabel.

Jika Anda menempatkan; pada akhir baris seperti yang telah saya lakukan di create.sql maka Anda dapat melakukan batch dan menjalankan semua perintah dalam sekali jalan. Tanpa; Anda harus menjalankan masing-masing dengan sendirinya. Di SQLiteSpy, cukup klik F9 untuk menjalankan semuanya.

Saya juga menyertakan sql untuk menjatuhkan ketiga tabel di dalam komentar multi-baris menggunakan / *.. * / sama seperti di C. Cukup pilih tiga baris dan lakukan ctrl + F9 untuk menjalankan teks yang dipilih.

Perintah-perintah ini memasukkan lima tempat:

Sekali lagi saya sudah menyertakan komentar teks ke tabel kosong, dengan hapus dari garis. Tidak ada yang dibatalkan jadi hati-hati dengan ini!

Hebatnya, dengan semua data dimuat (diakui tidak banyak) seluruh file database pada disk hanya 7KB.

Data Peristiwa

Alih-alih membangun sekelompok pernyataan penyisipan sepuluh, saya menggunakan Excel untuk membuat file .csv untuk data acara dan kemudian menggunakan utilitas baris perintah SQLite3 (yang datang dengan SQLite) dan perintah berikut untuk mengimpor Itu.

Catatan: Setiap baris dengan awalan titik (.) Adalah sebuah perintah. Gunakan .help untuk melihat semua perintah. Untuk menjalankan SQL ketik saja tanpa awalan periode.

Anda harus menggunakan blackslash ganda \\ di jalur impor untuk setiap folder. Hanya lakukan baris terakhir setelah .import berhasil. Ketika SQLite3 berjalan, pemisah default adalah: sehingga harus diubah ke koma sebelum impor.

Kembali ke Kode

Sekarang kita memiliki database yang terisi penuh, mari kita tulis Kode C untuk menjalankan kueri SQL ini yang mengembalikan daftar pihak, dengan deskripsi, tanggal dan tempat.

  • Baru mengenal SQL? Baca Apa itu SQL?

Ini bergabung dengan kolom idvenue antara acara dan tabel venue jadi kami mendapatkan nama venue bukan nilai int idvenue.

Fungsi SQLite C API

Ada banyak fungsi tetapi kita hanya perlu sedikit. Urutan pemrosesan adalah:

  1. Buka database dengan sqlite3_open (), keluar jika ada kesalahan membukanya.
  2. Siapkan SQL dengan sqlite3_prepare ()
  3. Ulangi menggunakan slqite3_step () hingga tidak ada lagi catatan
  4. (Dalam lingkaran) proses setiap kolom dengan sqlite3_column ...
  5. Akhirnya panggil sqlite3_close (db)

Ada langkah opsional setelah memanggil sqlite3_prepare di mana parameter yang dilewati terikat tetapi kita akan menyimpannya untuk tutorial di masa mendatang.

Jadi dalam program yang tercantum di bawah ini kode pseudo untuk langkah-langkah utama adalah:

Sql mengembalikan tiga nilai jadi jika sqlite3.step () == SQLITE_ROW maka nilai-nilai tersebut disalin dari jenis kolom yang sesuai. Saya telah menggunakan int dan teks. Saya menampilkan tanggal sebagai angka tetapi merasa bebas untuk mengubahnya menjadi tanggal.

Daftar Kode Contoh

instagram story viewer