intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

MySQL & C

Chia sẻ: Tran Tuananh | Ngày: | Loại File: PDF | Số trang:16

110
lượt xem
15
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

MySQL cung cấp một thư viện viết bằng C để làm việc với DBMS Các tính năng: Kết nối với máy chủ (sử dụng SSL – secured socket layer) Gửi các câu truy vấn, nhận và xử lý kết quả Kiểm tra và xử lý lỗi Include (cần khi biên dịch): #include #include Thư viện (cần khi biên dịch): #pragma comment(lib, "libmysql.lib") Hoặc thêm vào danh sách các thư viện dịch (xem trang sau) Thư viện động (cần khi chạy chương trình): libmysql.dll Khởi tạo thư viện: int mysql_library_init(int argc, char** argv, char **groups) Có thể bỏ qua, không cần gọi hàm này nếu chương trình chỉ có một tiến trình chạy (mono-thread) Kết thúc...

Chủ đề:
Lưu

Nội dung Text: MySQL & C

  1. MySQL & C EE4509, EE6133 – HK2 2011/2012 1 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  2. Giới thiệu MySQL cung cấp một thư viện viết bằng C để làm  việc với DBMS Các tính năng:  Kết nối với máy chủ (sử dụng SSL – secured socket  layer) Gửi các câu truy vấn, nhận và xử lý kết quả  Kiểm tra và xử lý lỗi  EE4509, EE6133 – HK2 2011/2012 2 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  3. Thiết lập thư viện Include (cần khi biên dịch):  #include  #include Thư viện (cần khi biên dịch):  #pragma comment(lib, "libmysql.lib")  Hoặc thêm vào danh sách các thư viện dịch (xem trang sau)  Thư viện động (cần khi chạy chương trình):  libmysql.dll  Khởi tạo thư viện:  int mysql_library_init(int argc,  char** argv, char **groups) Có thể bỏ qua, không cần gọi hàm này nếu chương trình chỉ có một tiến  trình chạy (mono-thread) Kết thúc sử dụng thư viện: mysql_library_end()  EE4509, EE6133 – HK2 2011/2012 3 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  4. Thêm thư viện để liên kết EE4509, EE6133 – HK2 2011/2012 4 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  5. Ví dụ #include  #include #include int main() { if (mysql_library_init(0, NULL, NULL)) { fprintf(stderr, "could not initialize MySQL library\n"); exit(1); } /* ... */ mysql_library_end(); return 0; } EE4509, EE6133 – HK2 2011/2012 5 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  6. Các kiểu dữ liệu MYSQL: chứa thông tin về kết nối tới DBMS  MYSQL_RES: chứa kết quả trả về của các câu truy  vấn có trả về kết quả là các hàng (các câu lệnh: select, show, explain) MYSQL_ROW: dữ liệu của một hàng trong kết quả  MYSQL_FIELD: dữ liệu của một trường trong một  hàng của kết quả EE4509, EE6133 – HK2 2011/2012 6 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  7. Thiết lập và đóng kết nối Tạo kết nối:  MYSQL* conn = mysql_init(NULL);  mysql_real_connect(conn, server_addr, username, password, database_name, 0, NULL, 0); Đóng kết nối:  mysql_close(conn);  EE4509, EE6133 – HK2 2011/2012 7 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  8. Ví dụ int main (int argc, char *argv[]) {  MYSQL* conn = mysql_init (NULL); if (conn == NULL) return 1; if (mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password, opt_db_name, opt_port_num, opt_socket_name, opt_flags) == NULL) { fprintf (stderr, "failed\n"); mysql_close (conn); } mysql_close (conn); return 0; } EE4509, EE6133 – HK2 2011/2012 8 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  9. Kiểm tra lỗi MySQL cung cấp các hàm sau để lấy thông tin về lỗi  khi xảy ra: unsigned int mysql_errno(MYSQL* conn)  Trả về mã lỗi const char *mysql_error(MYSQL* conn)  Trả về thông điệp lỗi Thông tin thêm về mã và các thông điệp lỗi (bản  5.0): http://dev.mysql.com/doc/refman/5.0/en/error-handling.html  EE4509, EE6133 – HK2 2011/2012 9 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  10. Thực hiện câu truy vấn Để gửi và thực hiện câu truy vấn, dùng hàm:  int mysql_query(MYSQL* conn,  const char* stmt) int mysql_real_query(MYSQL* conn, const char* stmt, unsigned long len) Các tham số:  stmt: chuỗi chứa câu truy vấn  len: độ dài của chuỗi chứa câu truy vấn Trả về 0 nếu thành công, khác 0 nếu có lỗi  EE4509, EE6133 – HK2 2011/2012 10 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  11. Lấy kết quả trả về Sau thực hiện câu truy vấn, gọi hàm:  MYSQL_RES* mysql_store_result(MYSQL* conn)  Tiếp theo gọi hàm sau để lấy từng hàng kết quả:  MYSQL_ROW mysql_fetch_row(MYSQL_RES* result)  Trả về NULL nếu kết thúc kết quả  Cuối cùng, kết thúc và giải phóng bộ nhớ đệm chứa kết  quả: void mysql_free_result(MYSQL_RES* result)  Di chuyển con trỏ đọc kết quả:  MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES* result,  MYSQL_ROW_OFFSET offset) MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES* result)  EE4509, EE6133 – HK2 2011/2012 11 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  12. Các thông tin về kết quả trả về Số thuộc tính (trường) của kết quả:  unsigned int mysql_num_fields(MYSQL_RES* result)  Số hàng:  my_ulonglong mysql_num_rows(MYSQL_RES* result)  ID của dữ liệu mới được thêm (câu lệnh insert):  my_ulonglong mysql_insert_id(MYSQL *mysql)  ID phải được định nghĩa với thuộc tính AUTO_INCREMENT  Số hàng đã bị thay đổi (câu lệnh insert, update,…)  my_ulonglong mysql_affected_rows(MYSQL *mysql)  EE4509, EE6133 – HK2 2011/2012 12 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  13. Ví dụ - select if (mysql_query(conn, "select * from USER") != 0)  handle_error(conn); else { MYSQL_RES* result = mysql_store_result(conn); printf("Number of rows: %d\n", mysql_num_rows(result); MYSQL_ROW row; while (row = mysql_fetch_row(result)) { printf("%s, %s, %s, %s\n", row[0], row[1], row[2], row[3]); } mysql_free_result(result); } EE4509, EE6133 – HK2 2011/2012 13 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  14. Ví dụ - insert if (mysql_query(conn, "insert into  User(username, password, level) values('superhero', 'chipchip', 3)") != 0) handle_error(conn); else { printf("%d rows added\n", mysql_affected_rows(conn)); printf("ID of inserted user: %d\n", mysql_insert_id(conn)); } EE4509, EE6133 – HK2 2011/2012 14 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  15. Ví dụ - update if (mysql_query(conn, "update User  set level = 5 where id in (2, 3, 4)") != 0) handle_error(conn); else { printf("%d rows updated\n", mysql_affected_rows(conn)); } EE4509, EE6133 – HK2 2011/2012 15 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  16. Bài tập Định nghĩa một quan hệ SinhVien, sau đó viết một 1. chương trình C nhập thông tin sinh viên, thêm vào CSDL và in ra ID của sinh viên vừa được thêm Viết chương trình C nhập ID của một sinh viên và 2. in ra thông tin của sinh viên đó Viết chương trình C nhập tên của sinh viên và in ra 3. thông tin những người có tên như đã nhập EE4509, EE6133 – HK2 2011/2012 16 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2