Chúng ta có thể kết nối cơ sở dữ liệu với C++ không?

Đây là bài 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 về lập trình MySQL với API C. Bạn cũng có thể cân nhắc xem hướng dẫn về MySQL trên ZetCode

MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở hàng đầu. Nó là một hệ thống quản lý cơ sở dữ liệu đa người dùng, đa luồng. MySQL đặc biệt phổ biến trên web. MySQL hiện 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ệ điều hành quan trọng. Nó chạy trên BSD Unix, Linux, Windows hoặc Mac OS

MariaDB là một ngã ba được cộng đồng phát triển, 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 ta 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

C99

Hướ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ể kết hợp khai báo với mã. Trong các chương trình C cũ hơn, chúng ta cần tách dòng này thành hai dòng

Trong ví dụ đầu tiên, chúng tôi kiểm tra một lệnh gọi hàm MySQL

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}

$ c99 version.c -o version  `mysql_config --cflags --libs`
6 hiển thị phiên bản máy khách MySQL

#include 
#include 
#include 

Chúng tôi bao gồm các tệp tiêu đề cần thiết

printf("MySQL client version: %s\n", mysql_get_client_info());

Dòng mã này xuất 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 lệnh gọi hàm

$ 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ệu

Ví 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 này

  • Bắt đầu cấu trúc xử lý kết nối
  • Tạo kết nối
  • Thực hiện một truy vấn
  • Đóng kết nối
#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}

Ví dụ code kết nối với hệ thống cơ sở dữ liệu MySQL và tạo một cơ sở dữ liệu mới có tên là

$ c99 version.c -o version  `mysql_config --cflags --libs`
8

Quảng cáo
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 một đối tượng MYSQL phù hợp với hàm
$ ./version
MySQL client version: 10.3.24
0. 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 chức năng

$ c99 version.c -o version  `mysql_config --cflags --libs`
9 không thành công, chúng tôi sẽ 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.24
0 thiết lập kết nối tới cơ sở dữ liệu. Chúng tôi cung cấp các tham số xử lý kết nối, tên máy chủ, tên người dùng và mật khẩu cho chức năng. 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 đặc quyền siêu người dùng để tạo cơ sở dữ liệu mới

MYSQL *con = mysql_init(NULL);
2

$ ./version
MySQL client version: 10.3.24
3 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 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

Trước khi tạo một bảng mới, chúng ta tạo một người dùng mà chúng ta 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.24
4

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.24
4 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 đó

MYSQL *con = mysql_init(NULL);
7

Chúng tôi không sử dụng bất kỳ lệnh gọi hàm MySQL mới nào ở đây. Chúng tôi sử dụng lệnh gọi hàm

$ ./version
MySQL client version: 10.3.24
3 để vừa tạo bảng vừa 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 một hàm

$ ./version
MySQL client version: 10.3.24
8 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.24
4 và mật khẩu là
#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
1. Tham số thứ năm là tên cơ sở dữ liệu

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
0

Ở đây chúng ta tạo một bảng tên là

#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
2. Nó có ba cột

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
1

Chúng tôi chèn một hàng vào bảng

#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
2

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
2

Chúng tôi hiển thị các bảng trong cơ sở dữ liệu

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
3

Chúng tôi chọn tất cả dữ liệu từ bảng

MySQL C lấy dữ liệu

Trong ví dụ tiếp theo, chúng tôi truy xuất dữ liệu từ một bảng

Chúng ta cần làm các bước sau

  • Tạo kết nối
  • Thực hiện kiểm tra
  • Lấy tập kết quả
  • Tìm nạp tất cả các hàng có sẵn
  • Giải phóng tập kết quả
#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
4

Ví dụ hiển thị tất cả các hàng từ bảng ô tô

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
5

Chúng tôi thực hiện truy vấn lấy tất cả dữ liệu từ bảng xe ô tô

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
6

Chúng tôi nhận được tập kết quả bằng cách sử dụng hàm

#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
4.
#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
5 là một cấu trúc để giữ một tập kết quả

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
7

Ta lấy số trường (cột) trong bảng

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
8

Chúng tôi tìm nạp các hàng và in chúng ra màn hình

#include 
#include 
#include 

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
9

Chúng tôi giải phóng tài nguyên

Quảng cáo
#include 
#include 
#include 
0

Đây là đầu ra

Đôi khi, chúng ta cần xác định id của hàng được chèn cuối cùng. Chúng ta có thể xác định id hàng được chèn cuối cùng bằng cách gọi hàm

#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
6. Hàm chỉ hoạt động nếu chúng ta đã xác định một cột
#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
7 trong bảng

#include 
#include 
#include 
1

Một bảng mới được tạo. Ba hàng được chèn vào bảng. Chúng tôi xác định id hàng được chèn cuối cùng

#include 
#include 
#include 
2

Cột

#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
8 có loại
#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
7

#include 
#include 
#include 
3

Hàm

#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
6 trả về giá trị được tạo cho cột
#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
7 bởi câu lệnh
MYSQL *con = mysql_init(NULL);
2 hoặc
MYSQL *con = mysql_init(NULL);
3 trước đó

#include 
#include 
#include 
4

Đây là đầu ra

Tiêu đề cột MySQL C

Trong ví dụ tiếp theo, chúng tôi truy xuất dữ liệu từ bảng và tên cột của nó

Quảng cáo
#include 
#include 
#include 
5

Chúng tôi in ba hàng đầu tiên từ bảng

#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
2. Chúng tôi cũng bao gồm các tiêu đề cột

#include 
#include 
#include 
6

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;

#include 
#include 
#include 
7

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 lấy tên tiêu đề cột từ cấu trúc này

#include 
#include 
#include 
8

Đây là đầu ra của chương trình của chúng tôi

Nhiều câu lệnh MySQL C

Có 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

#include 
#include 
#include 
9

Trong ví dụ này, chúng tôi thực hiện ba câu lệnh

MYSQL *con = mysql_init(NULL);
00 trong một truy vấn

Quảng cáo
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.24
0 là cờ khách hàng. Nó được sử dụng để kích hoạt các tính năng nhất định.
MYSQL *con = mysql_init(NULL);
9 cho phép thực thi nhiều câu lệnh. Điều này bị tắt theo mặc định

printf("MySQL client version: %s\n", mysql_get_client_info());
1

Truy vấn bao gồm ba câu lệnh

MYSQL *con = mysql_init(NULL);
00. Chúng được phân tách bằng dấu chấm phẩy
MYSQL *con = mysql_init(NULL);
04 ký tự. Ký tự gạch chéo ngược
MYSQL *con = mysql_init(NULL);
05 được sử dụng để phân tách chuỗi thành hai dòng. Nó không có gì để làm với nhiều tuyên bố

Quảng cáo
printf("MySQL client version: %s\n", mysql_get_client_info());
2

Đoạn mã được đặt giữa các câu lệnh do/while. Việc truy xuất dữ liệu sẽ được thực hiện trong nhiều chu kỳ. Chúng tôi truy xuất dữ liệu cho từng 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ó tồn tại nhiều kết quả hay không. Hàm trả về 0 nếu quá trình thực thi diễn ra suôn sẻ 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ào 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

đầu ra ví dụ

Một số người thích đưa hình ảnh của họ vào cơ sở dữ liệu, một số thích giữ chúng trên hệ thống tệp cho các ứng dụng của họ. Khó khăn kỹ thuật phát sinh khi chúng tôi 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 kiểu 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 tới 16 MB. Nó được xác định bởi kiểu dữ liệu
MYSQL *con = mysql_init(NULL);
10

Quảng cáo
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

Bao gồm này là dành cho chức năng

MYSQL *con = mysql_init(NULL);
12

Quảng cáo
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

Ta di chuyển con trỏ tệp về 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 có 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, e. g. kích thước của tập tin hình ảnh. Trong trường hợp có 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ó ra luồng đầu ra lỗi tiêu chuẩn

exit(0);
2

Trong mảng này, chúng ta sẽ lưu trữ dữ liệu hình ảnh

Quảng cáo
exit(0);
3

Ta đọc dữ liệu từ con trỏ tệp và lưu vào mảng dữ liệu. Tổng số phần tử được đọc thành công được trả về

exit(0);
4

Sau khi dữ liệu được đọc, chúng ta có thể đóng trình xử lý tệp

Quảng cáo
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 một số ký tự nguy hiểm tiềm ẩn 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 chặn các cuộc tấn công SQL injection. Bộ đệm mới phải dài ít nhất
MYSQL *con = mysql_init(NULL);
20

exit(0);
6

Ở đây chúng ta bắt đầu xây dựng câu lệnh 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 đủ 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 ghi đầu ra được định dạng vào bộ đệm truy vấn

exit(0);
8

Chúng tôi thực hiện truy vấn bằng hàm

MYSQL *con = mysql_init(NULL);
23. Không thể sử dụng
$ ./version
MySQL client version: 10.3.24
3 cho các câu lệnh chứa dữ liệu nhị phân;

Trong ví dụ trước, chúng ta đã 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

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 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
#include 
#include 
#include 

int main(int argc, char **argv)
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }

  if (mysql_real_connect(con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  if (mysql_query(con, "CREATE DATABASE testdb"))
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  mysql_close(con);
  exit(0);
}
8 1

$ c99 version.c -o version  `mysql_config --cflags --libs`
2

Hàng chứa dữ liệu thô

Quảng cáo
$ c99 version.c -o version  `mysql_config --cflags --libs`
3

Chúng tôi nhận được chiều dài của hình ảnh

$ c99 version.c -o version  `mysql_config --cflags --libs`
4

Chúng tôi ghi dữ liệu đã 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 bằng chức năng
MYSQL *con = mysql_init(NULL);
30

Quảng cáo
exit(0);
4

Sau khi chúng tôi đã ghi 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 MySQL C API. Bạn cũng có thể quan tâm đến hướng dẫn PyMySQL, hướng dẫn MySQL Visual Basic hoặc hướng dẫn mysqli PHP, hướng dẫn PostgreSQL C hoặc hướng dẫn SQLite C trên ZetCode

Làm cách nào để kết nối với cơ sở dữ liệu trong C?

API giao diện C/C++ . Nếu đối số tên tệp là NULL hoặc '. ký ức. ', sqlite3_open() sẽ tạo cơ sở dữ liệu trong bộ nhớ trong RAM chỉ tồn tại trong suốt thời lượng của phiên

Cơ sở dữ liệu nào là tốt nhất cho C?

1. Nhà tiên tri . Oracle là RDBMS phổ biến nhất được viết bằng hợp ngữ C, C++ và Java. Phiên bản hiện tại của Cơ sở dữ liệu Oracle là 19c.

SQL có sử dụng C không?

Cơ sở dữ liệu SQL nguồn mở (MySQL, MariaDB, PostGreSQL, v.v. ) được viết bằng C . Môi trường xây dựng (và thử nghiệm) được viết bằng autotools (Posix shell, Awk, Makefile) và các ngôn ngữ SQL tương ứng của chúng.