Hướng dẫn k sử dụng được sqlite3.h năm 2024

SQLite là một hệ thống quản lý cơ sở dữ liệu quan hệ nhấn mạnh vào tốc độ và cần sự hỗ trợ từ môi trường máy chủ. Nó không phải là cơ sở dữ liệu độc lập mà là cơ sở dữ liệu nhúng – không có máy chủ. SQLite cho phép người dùng có chức năng cơ sở dữ liệu bên trong cơ sở mã của họ mà không cần cài đặt thêm rdbms. Do đó, nó có sự đơn giản và ít cấu hình quản trị hơn so với các loại cơ sở dữ liệu độc lập hoặc máy chủ – máy khách.

Hướng dẫn k sử dụng được sqlite3.h năm 2024
SQLite là gì?

Ngoài việc lưu trữ và quản lý dữ liệu, SQLite có thể xử lý các lệnh truy vấn phức tạp kết hợp dữ liệu từ nhiều bảng để tạo báo cáo và tóm tắt dữ liệu.

SQLite mang đến lợi ích gì?

SQLite là một cơ sở dữ liệu nhúng, không yêu cầu giấy phép nào sau khi cài đặt và cho phép các nhà pháp triển lưu trữ dữ liệu mà không cần máy chủ. Nó không cần máy chủ bởi nó không cần một quy trình hoặc hệ thống máy chủ khác để hoạt động.

SQLite có tính linh hoạt cao bởi, bạn có thể dùng nó để làm việc đồng thời trên nhiều cơ sở dữ liệu trong cùng một phiên. Chạy trên đa nền tảng như macOS, Windows mà không yêu cầu bất kỳ cấu hình nào, không cần thiết lập hoặc quản trị.

Hướng dẫn k sử dụng được sqlite3.h năm 2024
Lợi ích của SQLite

Đúng với tên gọi của nó, SQLite mang đến cho doanh nghiệp các giải pháp đáng tin cậy để lưu trữ dữ liệu cục bộ trên các ứng dụng, thiết bị. Cung cấp giao diện đơn giản, dễ sử dụng nhưng vẫn đáp ứng đủ các tiện ích cơ bản mà RDBMS có trong các hệ thống cơ sở dữ liệu phức tạp và mở rộng hơn. Ngoài ra, SQLite cũng có bộ tiện ích mở rộng đa dạng với các chứng năng bổ sung hữu ích.

Khi nào nên sử dụng SQLite?

Ngày nay, SQLite vẫn để ứng dụng rộng rãi để phát triển phần mềm nhúng cho các thiết bị tivi, di động, máy ảnh,… dùng để quản lý các yêu cầu http có lưu lượng truy cập thấp đến trung bình.

Hướng dẫn k sử dụng được sqlite3.h năm 2024
Khi nào nên sử dụng SQLite

SQLite còn có thể được sử dụng để làm tập dữ liệu tạm thời để xử lý các dữ liệu khác trong ứng dụng. Hoặc có thể sử dụng cho người mới học tập hoặc dùng cho đào tạo bởi nó không yêu cầu cài đặt hay cấu hình.

Các lựa chọn thay thế cho SQLite

Hiện nay, có khá nhiều cơ sở dữ liệu khác cũng cung cấp nhiều tính năng như SQLite. Trong đó, một số cơ sở dữ liệu nhẹ có thể thay thế tốt nhất cho SQLite đó là Couchbase Lite, LevelDB, ObjectBox và LiteDB.

  • Couchbase Lite: là cơ sở dữ liệu NoSQL chuyên cho ứng dụng di động và PC, dùng trong các ứng dụng có tính đồng bộ dữ liệu, offline và mở rộng linh hoạt.
  • LevelDB: là hệ thống cơ sở dữ liệu key-value, tối ưu với dữ liệu nhỏ.
  • ObjectBox: Là cơ sở dữ liệu NoSQL cung cấp hiệu suất cao và tích hợp với ngôn ngữ lập trình như Java và Kotlin.
  • LiteDB: Là một cơ sở dữ liệu NoSQL chuyên dành cho các ứng dụng .NET, ứng dụng desktop và ứng dụng nhỏ gọn, không đòi hỏi cơ sở dữ liệu máy chủ.

Mặc dù vậy nhưng SQLite vẫn có các ưu điểm so với các lựa chọn thay thế của nó đó là tính ổn định và tuổi thọ. Cơ sở dữ liệu này đã được sử dụng những 20 năm và nó cũng không ngừng cải tiến và được ứng dụng rộng rãi.

Chính vì vậy, SQLite vẫn là lựa chọn tốt nhất cho các thiết bị nhúng, các trang web có traffic từ thấp đến trung bình và còn dùng để phân tích dữ liệu hiệu quả. Mặt khác, nó sẽ không phù hợp với các ứng dụng chạy lâu có thể tạo ra nhiều mã soạn sẵn, nó sẽ không hoạt động được tối ưu và không thể quản lý được.

Kết luận

Trên đây là những chia sẻ chi tiết về cơ sở dữ liệu mã nhúng SQLite. Qua đó, bạn có thể thấy, nó vẫn là lựa chọn tối ưu cho các ứng dụng có lưu lượng truy cập nhỏ và vừa và có thể sử dụng để học tập, đào tạo hoặc dùng để phân tích dữ liệu hiệu quả.

Trước khi sử dụng SQLite trong các chương trình C/C++, bạn cần đảm bảo rằng đã có SQLite Library được cài đặt trên máy tính. Bạn có thể kiểm tra chương Cài đặt SQLite để biết tiến trình cài đặt, nếu cần.

C/C++ Interface APIs

Dưới đây là một số chương trình C&C++ / SQLite Interface đủ để đáp ứng yêu cầu của bạn khi làm việc với SQLite Database từ chương trình C/C++ của bạn. Nếu bạn muốn tìm một ứng dụng tinh vi hơn, bạn có thể tìm nó trong SQLite Documentation.

STTAPI & Miêu tả 1sqlite3_open(const char *filename, sqlite3 **ppDb)

Chương trình con này mở một kết nối tới một SQLite database file và trả về một đối tượng database connection để được sử dụng bởi các chương trình con SQLite khác

Nếu tham số filename là NULL hoặc ':memory:', sqlite3_open() sẽ tạo một in-memory database trong RAM mà chỉ tồn tại trong suốt phiên đó.

Nếu filename không là NULL, sqlite3_open() cố gắng mở một database file bởi sử dụng giá trị của nó. Nếu không có file nào tồn tại với tên đó, hàm sqlite3_open() sẽ mở một database file mới bởi tên đó

2sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

Chương trình con này cung cấp một cách thức nhanh và dễ dàng để thực thi các lệnh SQL được cung cấp bởi tham số sql mà có thể bao gồm nhiều hơn một lệnh SQL

Ở đây, tham số đầu tiên sqlite3 là đối tượng open database, sqlite_callback là một callback từ đó data là tham số đầu tiên và errmsg sẽ được trả về để bắt bất kỳ lỗi nào được tạo ra bởi chương trình con đó

Chương trình con sqlite3_exec() phân tích và thực thi mỗi lệnh đã cho trong tham số sql tới khi nó tiến tới phần cuối của chuỗi hoặc bắt gặp một lỗi

3sqlite3_close(sqlite3*)

Chương trình con này đóng một database connection đã được mở trước đó bởi lời gọi tới hàm sqlite3_open(). Tất cả các lệnh đã chuẩn bị mà được gắn kết với connection nên bị kết thúc trước khi đóng connection đó.

Nếu còn tồn tại bất kỳ truy vấn nào chưa được kết thúc, sqlite3_close() sẽ trả về SQLITE_BUSY với một thông báo lỗi là Unable to close due to unfinalized statements

Kết nối tới Database

Chương trình C sau minh họa cách kết nối tới Database đang tồn tại. Nếu Database đó không tồn tại, thì nó sẽ được tạo, và cuối cùng một đối tượng Database sẽ được trả về.

include

include

int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ){

  fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  exit(0);
}else{
  fprintf(stderr, "Opened database successfully\n");
} sqlite3_close(db); }

Bây giờ, biên dịch và chạy chương trình trên để tạo cơ sở dữ liệu test.db trong thư mục hiện tại. Bạn có thể thay đổi Path tùy theo yêu cầu của mình.

$gcc test.c -l sqlite3 $./a.out Opened database successfully

Nếu bạn đang sử dụng C++ source code, thì bạn có thể biên dịch chương trình này như sau:

$g++ test.c -l sqlite3

Ở đây, chúng ra đang liên kết chương trình của chúng ta với SQLite3 Library để cung cấp các hàm cần thiết cho chương trình C. Việc này sẽ tạo một Database file là test.db trong thư mục và bạn sẽ có kết quả sau:

-rwxr-xr-x. 1 root root 7383 May 8 02:06 a.out -rw-r--r--. 1 root root 323 May 8 02:05 test.c -rw-r--r--. 1 root root 0 May 8 02:06 test.db

Tạo một bảng

Chương trình C sau sẽ được sử dụng để tạo một bảng trong Database đã được tạo trước đó.

include

include

include

static int callback(void NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char argv[]) { sqlite3 db; char *zErrMsg = 0; int rc; char *sql; / Open database / rc = sqlite3_open("test.db", &db); if( rc ){

  fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  exit(0);
}else{
  fprintf(stdout, "Opened database successfully\n");
} /
Create SQL statement / sql = "CREATE TABLE COMPANY(" -6 / Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg);
  sqlite3_free(zErrMsg);
}else{
  fprintf(stdout, "Table created successfully\n");
} sqlite3_close(db); return 0; }

Khi chương trình trên được biên dịch và thực thi, nó sẽ tạo bảng COMPANY trong test.db và sau đó liệt kê file như sau:

-rwxr-xr-x. 1 root root 9567 May 8 02:31 a.out -rw-r--r--. 1 root root 1207 May 8 02:31 test.c -rw-r--r--. 1 root root 3072 May 8 02:31 test.db

Quảng cáo

Hoạt động INSERT

Chương trình C sau minh họa cách chúng ta tạo các bản ghi trong bảng COMPANY đã tạo ở ví dụ trên:

include

include

include

static int callback(void NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char argv[]) { sqlite3 db; char *zErrMsg = 0; int rc; char *sql; / Open database / rc = sqlite3_open("test.db", &db); if( rc ){

  fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  exit(0);
}else{
  fprintf(stderr, "Opened database successfully\n");
} /
Create SQL statement / sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " -12 / Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){
  fprintf(stderr, "SQL error: %s\n", zErrMsg);
  sqlite3_free(zErrMsg);
}else{
  fprintf(stdout, "Records created successfully\n");
} sqlite3_close(db); return 0; }

Khi chương trình trên được biên dịch và thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và sẽ hiển thị hai dòng sau:

Opened database successfully Records created successfully

Hoạt động SELECT

Trước khi đi vào ví dụ thực sự để lấy các bản ghi, đầu tiên mình sẽ giới thiệu chi tiết cho bạn về hàm callback, sẽ được sử dụng trong các ví dụ. Hàm callback này cung cấp một cách thức để lấy các kết quả từ các lệnh SELECT. Nó có khai báo sau:

typedef int (sqlite3_callback)( void, / Data provided in the 4th argument of sqlite3_exec() / int, / The number of columns in row / char*, / An array of strings representing fields in the row / char* / An array of strings representing column names / );

Nếu hàm callback trên được cung cấp trong chương trình con sqlite_exec() như là tham số thứ ba, SQLite sẽ gọi hàm callback này cho mỗi bản ghi được xử lý trong mỗi lệnh SELECT được thực thi bên trong tham số SQL.

Chương trình C sau minh họa cách chúng ta lấy và hiển thị các bản ghi từ bảng COMPANY được tạo trong ví dụ trên:

include

include

include

static int callback(void data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char)data); for(i=0; i printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 db; char *zErrMsg = 0; int rc; char *sql; const char data = "Callback function called"; / Open database / rc = sqlite3_open("test.db", &db); if( rc ){

  fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  exit(0);
}else{
  fprintf(stderr, "Opened database successfully\n");
} / Create SQL statement / sql = "SELECT from COMPANY"; / Execute SQL statement / rc = sqlite3_exec(db, sql, callback, (void)data, &zErrMsg); if( rc != SQLITE_OK ){
  fprintf(stderr, "SQL error: %s\n", zErrMsg);
  sqlite3_free(zErrMsg);
}else{
  fprintf(stdout, "Operation done successfully\n");
} sqlite3_close(db); return 0; }

Khi chương trình trên được biên dịch và thực thi, kết quả là:

$gcc test.c -l sqlite3 $./a.out Opened database successfully

0

Hoạt động UPDATE

Chương trình C sau minh họa cách chúng ta sử dụng các lệnh UPDATE để cập nhật bất kỳ bản ghi nào và sau đó lấy và hiển thị các bản ghi đã được cập nhật từ bảng COMPANY:

$gcc test.c -l sqlite3 $./a.out Opened database successfully

1

Khi chương trình trên được biên dịch và thực thi, kết quả là:

$gcc test.c -l sqlite3 $./a.out Opened database successfully

2

Quảng cáo

Hoạt động DELETE

Chương trình C sau minh họa cách chúng ta sử dụng các lệnh DELETE để xóa bất kỳ bản ghi nào và sau đó lấy và hiển thị các bản ghi còn lại từ bảng COMPANY:

$gcc test.c -l sqlite3 $./a.out Opened database successfully

3

Khi chương trình trên được biên dịch và thực thi, kết quả là:

$gcc test.c -l sqlite3 $./a.out Opened database successfully

4

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Hướng dẫn k sử dụng được sqlite3.h năm 2024

Hướng dẫn k sử dụng được sqlite3.h năm 2024

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.