Thứ Ba, 11 tháng 11, 2014

SQLite cơ bản (phần 3): Xây dựng ứng dụng với C# và SQLite

Ở phần này cũng là phần cuối trong loạt bài về SQLite, tôi sẽ xây dựng một ứng dụng nhỏ nhằm demo việc sử dụng C# với SQLite. Chúng ta sẽ sử dụng thư viện System.Data.SQLite được cung cấp sẵn trên tranghttp://sqlite.org/download.html, bạn tìm đến mục Precompiled Binaries for .NET download về và cài đặt, chương trình sẽ tự động tích hợp vào phần Toolbox của Visual Studio. Tuy nhiên, ở đây sau khi cài đặt, bạn hãy tìm đến fileSystem.Data.SQLite trong thư mục C:\Program Files\SQLite.NET\bin, copy file này vào thư mục project tạo bởi C#. Cách sử dụng thư viện này cực kỳ đơn giản nếu bạn đã làm quen với ADO.NET.

Chúng ta sẽ sử dụng lại database đã tạo ra ở phần 2, ứng dụng của chúng ta có giao diện như sau, nó có các chức năng thêm, xóa, sửa vào table tb1 trong database db1 như đã tạo ra ở phần trước:
SQLite và C# demo


Bạn tạo một new project trên C# và đặt tên là SQLiteLearning :

SQLite Learning

Add reference, tìm tới file System.Data.SQLite, nhớ thêm vào mệnh đề thông báo
using System.Data.SQLite như hình sau:

Sau đây là toàn bộ mã nguồn của chương trình với giao diện như trên:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;

namespace SQLiteLearning
{
    public partial class Form1 : Form
    {
        SQLiteConnection conn = new SQLiteConnection();
        SQLiteCommand cmd = new SQLiteCommand();
       
        SQLiteDataAdapter adapter = new SQLiteDataAdapter();
       
        DataTable dt1 = new DataTable();
        BindingSource bs = new BindingSource();
        public Form1()
        {
            InitializeComponent();
            this.Load += new EventHandler(Form1_Load);
            btnLoad.Click += new EventHandler(btnLoad_Click);
            btnAddnew.Click += new EventHandler(btnAddnew_Click);
            btnSave.Click += new EventHandler(btnSave_Click);
            btnRemove.Click += new EventHandler(btnRemove_Click);
     
        }

        void btnRemove_Click(object sender, EventArgs e)
        {
            DataRow dr = ((DataRowView)bs.Current).Row;
            cmd.CommandText = "delete from tb1 where ID = " + dr["ID"].ToString();
            conn.Open();
            cmd.ExecuteNonQuery();
            bs.RemoveCurrent();
            conn.Close();
        }

        void btnSave_Click(object sender, EventArgs e)
        {
            conn.Open();
            DataRow dr = (( DataRowView)bs.Current).Row;

            // Nếu bản ghi đã tồn tại thì xóa trước, sau đó insert dòng đã thay đổi vào
            cmd.CommandText = "delete from tb1 where ID = " + dr["ID"].ToString();
            cmd.ExecuteNonQuery();
           
            cmd.CommandText = "insert into tb1 values(" + dr["ID"].ToString() + ", '" + dr["Name"] + "')";
            cmd.ExecuteNonQuery();

            conn.Close();
        }

        void btnAddnew_Click(object sender, EventArgs e)
        {
            bs.AddNew();
        }

        void btnLoad_Click(object sender, EventArgs e)
        {
            LoadData();
        }

        void Form1_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        private void LoadData()
        {
            cmd.Connection = conn;
            adapter.SelectCommand = cmd;
            conn.ConnectionString = @"data source=C:\Users\user01\db1.db";
            cmd.CommandText = "select * from tb1";
            adapter.SelectCommand = cmd;
            dt1.Rows.Clear();
            adapter.Fill(dt1);
            bs.DataSource = dt1;
            dataGridView1.DataSource = bs;
        }
    }
}
Sau 3 bài làm quen với SQLite, chúng ta đã có những hiểu biết căn bản đủ để làm một ứng dụng nhỏ bằng SQLite và C#, chúng ta tạm dừng đề tài SQLite tại đây,  tôi sẽ gửi tới cộng đồng các bài viết nâng cao khi điều kiện cho phép.
-----------------------------------------------------------------------------
Nếu quý vị có bất kỳ chia sẻ gì, xin vui lòng để lại comment, tác giả hoan nghênh và đón nhận mọi ý kiến xây dựng và góp ý.

SQLite: Kiến thức cơ bản (Phần 2)

Ở phần 1, tôi đã giới thiệu một số đặc điểm về mặt lý thuyết về SQLite, phần 2 chúng ta sẽ đi vào xây dựng một database thực tế trên SQLite3.

Ở bài này, tôi sử dụng phiên bản mới nhất của SQLite hiện nay, bạn dowload tại đây: 


Download SQL Lite 

Giải nén file tải về sẽ có file sqlite3.exe. Chúng ta sẽ sử dụng file này để thực hiện việc tạo database, table, câu truy vấn và các thao tác liên quan đến database được tạo ra từ SQLite.

Sau khi giải nén, bạn vào Start; Run; gõ cmd để lên giao diện đồ họa command-line.

Chuyển đến thư mục bạn đã giải nén ở trên, nơi có file sqlite3.exe bằng lệnh cd trong DOS.

Ở hình sau, file sqlite3.exec tôi để ở thư mục như trong hình.

Bạn nhập lệnh sqlite3 db1.db để tạo ra một database có tên là db1, hình xuất hiện như sau:

Tạo database trong SQLite

Ở dấu nhắc, tiếp tục nhập lệnh sau để tạo một table là tb1 (chú ý: lệnh tạo database ở trên chưa kết thúc khi chưa có table, nên không cần kết thúc với dấu ";", nhưng với câu lệnh tạo bảng sau thì phải có dấu ";" kết thúc ở sau):
sqlite> create table tb1 (id int, name varchar(50));

Sau bước này, file database sẽ được tạo ra có tên là db1.db và có một table trong đó có tên là tb1 như hình sau:
Tạo table trong SQLite


Thêm dữ liệu vào table tb1

Cũng từ dấu nhắc sqlite> ta thực hiện lệnh insert bằng sql như sau:

insert into tb1 values(1, 'tran hoai nam');

insert into tb1 values(2, 'nguyen van teo');

insert into tb1 values(3, 'le hong quan');

select * from tb1;

Kết quả như sau:
Insert dữ liệu vào bảng trong SQLite
Vậy là chúng ta đã thực hiện việc tạo database, table, insert dữ liệu và thực hiện truy vấn dữ liệu từ database sqlite bằng câu lệnh select. Bạn có thể thực hiện các lệnh khác để thấy việc sử dụng SQLite đơn giản như thế nào. Chỉ cần bạn đã quen thuộc với ngôn ngữ truy vấn SQL là bạn có thể dễ dàng làm việc với SQLite.

Sử dụng SQLite Expert để làm việc với SQLite qua giao diện đồ họa:

Việc sử dụng dòng lệnh như trên rõ ràng có nhiều hạn chế và không thoải mái cũng như rất chán. Chính vì vậy mà cộng đồng mạng đã tạo ra nhiều công cụ để sử dụng SQLite hiệu quả và dễ dàng hơn. Tiêu biểu có SQLite studio, SQLite Browser, và đặc biệt có SQLite Expert...

Ba công cụ tôi vừa giới thiệu đến các bạn mỗi thứ có một vài ưu điểm riêng, như có cái thì hỗ trợ xuất ra excel, cái kia không, có cái hỗ trợ tự động insert dữ liệu test vào table để chúng ta có dữ liệu mà thực hành (SQLite studio), có cái thì hỗ trợ nhập dữ liệu theo mã Unicode...

SQLite Expert bản Personal (free) tôi thấy là tốt nhất để sử dụng. Chú ý: SQLite Expert không sử dụng sqlite.exe trực tiếp để tạo và thao tác database, thay vào đó nó sử dụng thư viện sqlite.dll (trong dll này đã đóng gói sqlite.exe kèm theo) để làm công việc trên.

Download SQLite Expert tại đây: http://www.sqliteexpert.com/download.htmlỞ phần tiếp theo tôi sẽ viết một ứng dụng nhỏ bằng C# sử dụng database SQLite để lưu trữ dữ liệu, mời bạn đón đọc ở (phần 3).

SQLite: Kiến thức cơ bản (Phần 1)

Mặc dù blog này chủ yếu viết về SQL Server, tuy nhiên trong công việc gần đây tôi có yêu cầu cần phải nghiên cứu một ít liên quan đến các HQTCSDL khác, tìm hiểu một ít về SQLite thấy có một số điều thú vị nên mở thêm một mục liên quan đến nó, sẽ tranh thủ viết một vài bài cho những ai quan tâm. Thực sự phải nói là SQLite cực kì đơn giản, dễ hiểu, đặc biệt cho những ai đã biết về một HQTCSDL nào đó nhự Access, SQL Server...

Trước hết, ta tìm hiểu: 
SQLite là gì?
Theo trang sqlite.com, SQLite là một thư viện thực thi các chức năng của một database engine với đặc điểm giống như một phần mềm portable, không cần cài đặt, không cần cấu hình, không cần server, những điểm này rất khác so với việc sử dụng SQL Server hoặc Oracle, nhưng nó vẫn có transaction để đảm bảo tính toàn vẹn và an toàn trong quá trình thao tác dữ liệu. Có thể so sánh nó có một vài điểm giống với Access, nhưng nhìn chung vẫn có nhiều sự khác biệt.

SQLite được đánh giá là nhanh, tin cậy và đặc biệt là làm cho trở nên đơn giản nhất cho việc học và sử dụng nó.  



Chi tiết về các đặc tính của SQLite
1. Zero-Configuration: 
Bạn hoàn toàn không phải thiết lập bất kỳ một cấu hình nào để có thể sử dụng SQLite, tất cả những gì bạn cần là một file SQLite.exe và chạy.

2. Serverless:
Các HQTCSDL như SQL Server, Oracle, Postgre... thường cần một server riêng để triển khai ứng dụng, cài đặt database engine, các máy khách sẽ kết nối đến server để xử lý dữ liệu một cách tập trung. Tuy nhiên SQLite không làm việc theo cách này mà ứng dụng sẽ truy xuất trực tiếp vào file database, các máy khách cũng có thể truy xuất một file database SQLite để trên một server thông qua cơ chế chia sẻ và bảo mật file của hệ điều hành,người dùng nào truy cập được vào thư mục và có quyền đọc - ghi thì sẽ có thể đọc ghi vào file database SQLite. Tuy nhiên sẽ có những hạn chế của kỹ thuật mà chi tiết bạn đọc có thể tham khảo tại đây.

3. Single Database File: Database do SQLite tạo ra là một file dữ liệu duy nhất. Tất cả chỉ có thế.
4. Stable Cross-Platform Database File
Bạn có thể copy file database SQLite từ hệ thống này sang hệ thống khác, từ hệ thống 32 hay 64 bit, từ phiên bản SQLite này sang phiên bản khác mà không cần chuyển đổi , nâng cấp hệ điều hành, cấu trúc hệ thống hay phải làm lại file database.

5. Compact: Cực kỳ nhỏ gọn.
6. Manifest typing (tạm dịch: kiểu dữ liệu đặc tả):
Khi bạn dùng SQLite sẽ để ý là số lượng kiểu dữ liệu của nó rất ít, điều này là một đặc trưng của nó, bởi trong SQLite, kiểu dữ liệu là một thuộc tính của chính giá trị được lưu chứ không phải là thuộc tính của cột lưu giá trị đó. Tuy vậy, cũng có một vài ràng buộc, là với cột khóa chính kiểu integer thì phải lưu giá trị phải chính xác là kiểu int, ngoài ra SQLite cũng cố gắng chuyển đổi kiểu của giá trị sang kiểu của cột lưu nó khi có thể. Mục đích của việc thiết kế kiểu dữ liệu  như vậy nhằm làm cho nó tin cậy và đơn giản hóa việc sử dụng, và cũng để dễ tương thích hơn khi sử dụng với các ngôn ngữ như Tcl hoặc Python. 

7. Variable-length records
Dữ liệu lưu bao nhiều thì hệ thống cấp phát cho bấy nhiêu không gian bộ nhớ cho từng dòng dữ liệu, không cấp phát thừa hoặc thiếu không gian lưu trữ cho dữ liệu, nhờ đó mà file database trở nên nhỏ gọn và tốc độ xử lý dữ liệu cũng nhanh hơn.

...  Và một số thuộc tính khác, tham khảo chi tiết tại đây: tại đây. 
Các bước để sử dụng SQLite?

Hãy hình dung các bước để sử dụng SQLite như sau: bạn download một file zip có chứa SQLite.exe về giải nén vào một thư mục, sau đó mở cmd lên, chuyển đến thư mục chứa SQLite, chạy SQLite.exe và thực hiện các lệnh tạo database, table, insert dữ liệu, select... hoàn toàn bằng dòng lệnh. Một file chứa database và dữ liệu sẽ được tạo ra vào một thư mục nào đó. Đơn giản chỉ có vậy :D.

Nếu không thích sử dụng dòng lệnh, bạn có thể sử dụng giao diện đồ họa bằng cách tải SQLite studio hoặc SQLite Browser về, các ứng dụng này hoàn toàn miễn phí, gọn nhẹ, không cần cài đặt, tải về chạy file exe và dùng ngay.

Tính phổ biến?

Theo như giới thiệu thì SQLite là HQTCSDL được triển khai phổ biết nhất trên thế giới, (lý do có thể là do được sử dụng rộng rãi trên các thiết bị di động). Và SQLite là một hệ quản trị CSDL mã nguồn mở, hoàn toàn miễn phí.

Một số công ty và sản phẩm sử dụng SQLite như: Oracle, Bentley, Mozilla ( Firefox), Bloomberg...
Search từ khóa "SQLite and Adroid" cũng cho kết quả rất phong phú.

http://sql-note.blogspot.com/

SQL phù hợp với tình huống nào? Có thay thế được cho SQL Server, Oracle, Postgre... được không?
Trả lời luôn là không.
SQLite phù hợp trong các tình huống sau:
  1. Ứng dụng sử dụng dạng flat file để lưu trữ dữ liệu: như từ điển, các ứng dụng nhỏ, lưu cấu hình ứng dụng... Nó mạnh mẽ hơn nhiều kỹ thuật lưu trữ file thông thường..
  2. Sử dụng trong các thiết bị nhúng: smart phone, PDA và các thiết bị di động rất phù hợp với SQLite.
  3. Các website có khoảng 100 nghìn lượt xem/ ngày, mặc dù về mặt lý thuyết thì SQLite có thể đáp ứng gấp 10 lần conn số này.
  4. Là thay thế hoàn hảo cho database dạng file: nhiều ứng dụng sử dụng fopen(), fread(), fwite() để lưu trữ dữ liệu, SQLite sẽ thay thế hoàn toàn kỹ thuật đó bằng kỹ thuật hiện đại hơn, dễ dùng và tin cậy hơn.
  5. Sử dụng làm database tạm để lưu trữ dữ liệu lấy về từ các database trên SQL server, Oracle...
  6. Làm database demo cho các ứng dụng lớn, dùng để làm mô hình khái niệm cho ứng dụng.
  7. Dùng cho giảng dạy: để giảng dạy cho những người mới làm quen với ngôn ngữ truy vấn SQL.
Ngoài các trường hợp trên, tốt hơn hết là bạn sử dụng SQL Server, Oracle, PostgreSQL để xây dựng các ựng dụng cho doanh nghiệp.