Hướng dẫn mysql c api example - ví dụ mysql c api
Sửa đổi lần cuối ngày 23 tháng 9 năm 2020 Show Đây là hướng dẫn lập trình C cho cơ sở dữ liệu MySQL. Nó bao gồm những điều cơ bản của lập trình MySQL với API C. Bạn cũng có thể xem xét để xem xét hướng dẫn MySQL trên ZetCode. Về cơ sở dữ liệu MySQLMySQL là một hệ thống quản lý cơ sở dữ liệu nguồn mở hàng đầu. Nó là một người dùng nhiều người dùng, hệ thống quản lý cơ sở dữ liệu đa luồng. MySQL đặc biệt phổ biến trên web. MySQL hiện đang thuộc sở hữu của Oracle. Cơ sở dữ liệu MySQL có sẵn trên hầu hết các nền tảng HĐH quan trọng. Nó chạy trên BSD Unix, Linux, Windows hoặc Mac OS. Mariadb là một ngã ba được phát triển cộng đồng, được hỗ trợ thương mại của hệ thống quản lý cơ sở dữ liệu quan hệ MySQL $ sudo apt install default-libmysqlclient-dev Để có thể biên dịch các ví dụ C, chúng tôi cần cài đặt các thư viện phát triển MySQL C. Dòng trên cho thấy cách chúng ta có thể làm điều đó trên Linux dựa trên Debian. C99Hướng dẫn này sử dụng C99. Đối với trình biên dịch GNU C, chúng ta cần thêm tùy chọn -STD = C99. Đối với người dùng Windows, Pelles C IDE rất được khuyến khích. (MSVC không hỗ trợ C99.) MYSQL *con = mysql_init(NULL); Trong C99, chúng ta có thể trộn các khai báo với mã. Trong các chương trình C cũ hơn, chúng ta sẽ cần tách dòng này thành hai dòng. Mysql c ví dụ đầu tiênTrong ví dụ đầu tiên, chúng tôi kiểm tra một cuộc gọi hàm MySQL. version.c #include
$ c99 version.c -o version `mysql_config --cflags --libs`6 hiển thị phiên bản máy khách MySQL. #include Chúng tôi bao gồm các tập tin tiêu đề cần thiết. printf("MySQL client version: %s\n", mysql_get_client_info()); Dòng mã này xuất ra phiên bản của máy khách MySQL. Đối với điều này, chúng tôi sử dụng cuộc gọi chức năng $ c99 version.c -o version `mysql_config --cflags --libs`6. exit(0); Chúng tôi thoát khỏi kịch bản. $ c99 version.c -o version `mysql_config --cflags --libs` Đây là cách chúng tôi biên dịch ví dụ mã. $ ./version MySQL client version: 10.3.24 Đây là đầu ra. Mysql c tạo cơ sở dữ liệuVí dụ mã tiếp theo sẽ tạo cơ sở dữ liệu. Ví dụ mã có thể được chia thành các phần sau:
createdb.c #include Ví dụ mã kết nối với hệ thống cơ sở dữ liệu MySQL và tạo cơ sở dữ liệu mới gọi là $ c99 version.c -o version `mysql_config --cflags --libs`8. MYSQL *con = mysql_init(NULL); Hàm $ c99 version.c -o version `mysql_config --cflags --libs`9 phân bổ hoặc khởi tạo đối tượng MySQL phù hợp cho hàm $ ./version MySQL client version: 10.3.240. Hãy nhớ rằng đây là C99. MYSQL *con = mysql_init(NULL);0 Chúng tôi kiểm tra giá trị trả về. Nếu hàm $ c99 version.c -o version `mysql_config --cflags --libs`9 không thành công, chúng tôi in thông báo lỗi và chấm dứt ứng dụng. MYSQL *con = mysql_init(NULL);1 Hàm $ ./version MySQL client version: 10.3.240 thiết lập kết nối với cơ sở dữ liệu. Chúng tôi cung cấp trình xử lý kết nối, tên máy chủ, tên người dùng và thông số mật khẩu cho hàm. Bốn tham số khác là tên cơ sở dữ liệu, số cổng, ổ cắm UNIX và cuối cùng là cờ máy khách. Chúng tôi cần SuperUser Pribiliges để tạo một cơ sở dữ liệu mới. MYSQL *con = mysql_init(NULL);2
$ ./version MySQL client version: 10.3.243 thực thi câu lệnh SQL. Trong trường hợp của chúng tôi, câu lệnh tạo ra một cơ sở dữ liệu mới. MYSQL *con = mysql_init(NULL);3 Cuối cùng, chúng tôi đóng kết nối cơ sở dữ liệu. MYSQL *con = mysql_init(NULL);4 Đây là bằng chứng cho thấy cơ sở dữ liệu đã được tạo ra. Mysql c tạo và điền bảngTrước khi chúng tôi tạo một bảng mới, chúng tôi tạo một người dùng mà chúng tôi sẽ sử dụng trong phần còn lại của hướng dẫn. MYSQL *con = mysql_init(NULL);5 Chúng tôi đã tạo một người dùng mới $ ./version MySQL client version: 10.3.244. MYSQL *con = mysql_init(NULL);6 Ở đây chúng tôi cấp tất cả các đặc quyền cho $ ./version MySQL client version: 10.3.244 trên cơ sở dữ liệu $ c99 version.c -o version `mysql_config --cflags --libs`8. Ví dụ mã tiếp theo tạo một bảng và chèn một số dữ liệu vào đó. create_populate.c MYSQL *con = mysql_init(NULL);7 Chúng tôi không sử dụng bất kỳ cuộc gọi hàm MySQL mới nào ở đây. Chúng tôi sử dụng cuộc gọi chức năng $ ./version MySQL client version: 10.3.243 để cả tạo bảng và chèn dữ liệu vào đó. MYSQL *con = mysql_init(NULL);8 Để tránh sự lặp lại không cần thiết, chúng tôi tạo chức năng tùy chỉnh. MYSQL *con = mysql_init(NULL);9 Chúng tôi kết nối với cơ sở dữ liệu $ c99 version.c -o version `mysql_config --cflags --libs`8. Tên người dùng là $ ./version MySQL client version: 10.3.244 và mật khẩu là #include1. Tham số thứ năm là tên cơ sở dữ liệu. #include0 Ở đây chúng tôi tạo một bảng có tên #include2. Nó có ba cột. #include1 Chúng tôi chèn một hàng vào bảng #include2. #include2 Chúng tôi hiển thị các bảng trong cơ sở dữ liệu. #include3 Chúng tôi chọn tất cả dữ liệu từ bảng. Mysql c lấy dữ liệuTrong ví dụ tiếp theo, chúng tôi lấy dữ liệu từ một bảng. Chúng ta cần thực hiện các bước sau:
retrieva_data.c #include4 Ví dụ cho thấy tất cả các hàng từ bảng xe. #include5 Chúng tôi thực hiện truy vấn lấy tất cả dữ liệu từ bảng xe. #include6 Chúng tôi nhận được tập kết quả bằng cách sử dụng hàm #include4. #include5 là một cấu trúc để giữ một bộ kết quả. #include7 Chúng tôi nhận được số trường (cột) trong bảng. #include8 Chúng tôi tìm nạp các hàng và in chúng lên màn hình. #include9 Chúng tôi giải phóng các tài nguyên. #include0 Đây là đầu ra. Mysql c tạo cơ sở dữ liệuVí dụ mã tiếp theo sẽ tạo cơ sở dữ liệu. Ví dụ mã có thể được chia thành các phần sau: last_row_id.c #include1 Một bảng mới được tạo ra. Ba hàng được chèn vào bàn. Chúng tôi xác định ID hàng chèn cuối cùng. #include2 Cột #include8 có loại #include7. #include3 Hàm #include6 trả về giá trị được tạo cho cột #include7 bằng câu lệnh MYSQL *con = mysql_init(NULL);2 hoặc MYSQL *con = mysql_init(NULL);3 trước đó. #include4 Đây là đầu ra. Tiêu đề cột MySQL CTrong ví dụ tiếp theo, chúng tôi lấy dữ liệu từ bảng và tên cột của nó. headers.c #include5 Chúng tôi in ba hàng đầu tiên từ bảng #include2. Chúng tôi cũng bao gồm các tiêu đề cột. #include6 Cấu trúc MYSQL *con = mysql_init(NULL);5 chứa thông tin về một trường, chẳng hạn như tên, loại và kích thước của trường. Giá trị trường không phải là một phần của cấu trúc này; Chúng được chứa trong cấu trúc MYSQL *con = mysql_init(NULL);6. #include7 Hàng đầu tiên chứa các tiêu đề cột. Cuộc gọi MYSQL *con = mysql_init(NULL);7 trả về cấu trúc MYSQL *con = mysql_init(NULL);5. Chúng tôi nhận được tên tiêu đề cột từ cấu trúc này. #include8 Đây là đầu ra của chương trình của chúng tôi. Mysql c nhiều câu lệnhCó thể thực thi nhiều câu lệnh SQL trong một truy vấn. Chúng ta phải đặt cờ MYSQL *con = mysql_init(NULL);9 trong phương thức kết nối. multiple_statements.c #include9 Trong ví dụ, chúng tôi thực thi ba câu lệnh MYSQL *con = mysql_init(NULL);00 trong một truy vấn. printf("MySQL client version: %s\n", mysql_get_client_info());0 Tùy chọn cuối cùng của phương thức $ ./version MySQL client version: 10.3.240 là cờ máy khách. Nó được sử dụng để kích hoạt một số tính năng nhất định. MYSQL *con = mysql_init(NULL);9 cho phép thực hiện nhiều câu lệnh. Điều này bị vô hiệu hóa theo mặc định. printf("MySQL client version: %s\n", mysql_get_client_info());1 Truy vấn bao gồm ba câu MYSQL *con = mysql_init(NULL);00. Chúng được phân tách bằng ký tự dấu chấm phẩy MYSQL *con = mysql_init(NULL);04. Ký tự dấu gạch chéo ngược MYSQL *con = mysql_init(NULL);05 được sử dụng để tách chuỗi thành hai dòng. Nó không liên quan gì đến nhiều tuyên bố. printf("MySQL client version: %s\n", mysql_get_client_info());2 Mã được đặt giữa các câu lệnh DO/trong khi. Việc truy xuất dữ liệu sẽ được thực hiện trong nhiều chu kỳ. Chúng tôi lấy dữ liệu cho mỗi câu lệnh MYSQL *con = mysql_init(NULL);00 riêng biệt. printf("MySQL client version: %s\n", mysql_get_client_info());3 Chúng tôi mong đợi nhiều bộ kết quả. Do đó, chúng tôi gọi hàm MYSQL *con = mysql_init(NULL);07. Nó đọc kết quả câu lệnh tiếp theo và trả về một trạng thái để cho biết liệu có nhiều kết quả tồn tại hơn hay không. Hàm trả về 0 nếu việc thực hiện ổn và có nhiều kết quả hơn. Nó trả về -1, khi nó được thực thi OK và không còn kết quả nữa. Cuối cùng, nó trả về giá trị lớn hơn 0 nếu xảy ra lỗi. printf("MySQL client version: %s\n", mysql_get_client_info());4 Chúng tôi kiểm tra lỗi. printf("MySQL client version: %s\n", mysql_get_client_info());5 Ví dụ đầu ra. Mysql c chèn hình ảnhMột số người thích đưa hình ảnh của họ vào cơ sở dữ liệu, một số người thích giữ chúng trên hệ thống tệp cho các ứng dụng của họ. Khó khăn về kỹ thuật phát sinh khi chúng ta làm việc với nhiều hình ảnh. Hình ảnh là dữ liệu nhị phân. Cơ sở dữ liệu MySQL có một loại dữ liệu đặc biệt để lưu trữ dữ liệu nhị phân được gọi là MYSQL *con = mysql_init(NULL);08 (đối tượng lớn nhị phân). printf("MySQL client version: %s\n", mysql_get_client_info());6 Đối với các ví dụ của chúng tôi, chúng tôi tạo một bảng MYSQL *con = mysql_init(NULL);09 mới. Kích thước hình ảnh có thể lên đến 16 MB. Nó được xác định bởi kiểu dữ liệu MYSQL *con = mysql_init(NULL);10. insert_image.c printf("MySQL client version: %s\n", mysql_get_client_info());7 Trong ví dụ này, chúng tôi chèn một hình ảnh vào bảng MYSQL *con = mysql_init(NULL);11. printf("MySQL client version: %s\n", mysql_get_client_info());8 Điều này bao gồm là cho chức năng MYSQL *con = mysql_init(NULL);12. printf("MySQL client version: %s\n", mysql_get_client_info());9 Ở đây chúng tôi mở tệp hình ảnh. Trong thư mục làm việc hiện tại, chúng ta nên có tệp MYSQL *con = mysql_init(NULL);13. exit(0);0 Chúng tôi di chuyển con trỏ tệp đến cuối tệp bằng hàm MYSQL *con = mysql_init(NULL);14. Chúng tôi sẽ xác định kích thước của hình ảnh. Nếu xảy ra lỗi, chỉ báo lỗi được đặt. Chúng tôi kiểm tra chỉ báo bằng hàm MYSQL *con = mysql_init(NULL);14. Trong trường hợp lỗi, chúng tôi cũng đóng trình xử lý tệp đã mở. exit(0);1 Đối với các luồng nhị phân, hàm MYSQL *con = mysql_init(NULL);16 trả về số byte từ đầu tệp, ví dụ: Kích thước của tệp hình ảnh. Trong trường hợp lỗi, hàm trả về -1 và errno được đặt. Hàm MYSQL *con = mysql_init(NULL);17 diễn giải giá trị của errno dưới dạng thông báo lỗi và in nó vào luồng đầu ra lỗi tiêu chuẩn. exit(0);2 Trong mảng này, chúng tôi sẽ lưu trữ dữ liệu hình ảnh. exit(0);3 Chúng tôi đọc dữ liệu từ con trỏ tệp và lưu trữ nó trong mảng dữ liệu. Tổng số yếu tố đọc thành công được trả về. exit(0);4 Sau khi dữ liệu được đọc, chúng tôi có thể đóng trình xử lý tệp. exit(0);5 Hàm MYSQL *con = mysql_init(NULL);18 thêm một ký tự thoát, dấu gạch chéo ngược, MYSQL *con = mysql_init(NULL);05, trước khi một số ký tự có khả năng nguy hiểm nhất định trong một chuỗi được truyền vào hàm. Điều này có thể giúp ngăn ngừa các cuộc tấn công tiêm SQL. Bộ đệm mới phải dài nhất MYSQL *con = mysql_init(NULL);20. exit(0);6 Ở đây chúng tôi bắt đầu xây dựng tuyên bố SQL. Chúng tôi xác định kích thước của chuỗi SQL bằng hàm MYSQL *con = mysql_init(NULL);12. exit(0);7 Truy vấn phải mất đủ dài để chứa kích thước của câu lệnh chuỗi SQL và kích thước của tệp hình ảnh. Sử dụng hàm MYSQL *con = mysql_init(NULL);22, chúng tôi viết đầu ra được định dạng vào bộ đệm truy vấn. exit(0);8 Chúng tôi thực thi truy vấn bằng hàm MYSQL *con = mysql_init(NULL);23. $ ./version MySQL client version: 10.3.243 không thể được sử dụng cho các câu lệnh có chứa dữ liệu nhị phân; Chúng ta phải sử dụng MYSQL *con = mysql_init(NULL);23 thay thế. Mysql c chọn hình ảnhTrong ví dụ trước, chúng tôi đã chèn một hình ảnh vào cơ sở dữ liệu. Trong ví dụ sau, chúng tôi chọn hình ảnh được chèn từ cơ sở dữ liệu. select_image.c exit(0);9 Trong ví dụ này, chúng tôi tạo một tệp hình ảnh từ cơ sở dữ liệu. $ c99 version.c -o version `mysql_config --cflags --libs`0 Chúng tôi mở một trình xử lý tập tin mới để viết. $ c99 version.c -o version `mysql_config --cflags --libs`1 Chúng tôi chọn cột MYSQL *con = mysql_init(NULL);26 từ bảng MYSQL *con = mysql_init(NULL);11 với #include8 1. $ c99 version.c -o version `mysql_config --cflags --libs`2 Hàng chứa dữ liệu thô. $ c99 version.c -o version `mysql_config --cflags --libs`3 Chúng tôi có được chiều dài của hình ảnh. $ c99 version.c -o version `mysql_config --cflags --libs`4 Chúng tôi viết dữ liệu được truy xuất vào đĩa bằng lệnh gọi hàm MYSQL *con = mysql_init(NULL);29. Chúng tôi kiểm tra chỉ báo lỗi với hàm MYSQL *con = mysql_init(NULL);30. exit(0);4 Sau khi chúng tôi đã viết dữ liệu hình ảnh, chúng tôi đóng trình xử lý tệp bằng hàm MYSQL *con = mysql_init(NULL);31. Đây là hướng dẫn API MySQL C. Bạn cũng có thể quan tâm đến hướng dẫn PYMYSQL, hướng dẫn cơ bản trực quan của MySQL hoặc hướng dẫn PHP MySQLI, hướng dẫn PostgreSQL C hoặc hướng dẫn SQLite C trên ZetCode. |