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
              
                                            
                                
            
 
            
                 16 trang
16 trang | 
Chia sẻ: luyenbuizn | Lượt xem: 1471 | Lượt tải: 0 
              
            Nội dung tài liệu Tài liệu My SQL và C, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
MySQL & C 
1 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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 
2 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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() 
3 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Thêm thư viện để liên kết 
4 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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; 
 } 
5 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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ả 
6 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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); 
7 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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; 
 } 
8 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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): 
  
9 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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 
10 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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) 
11 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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) 
12 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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); 
} 
13 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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)); 
} 
14 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
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)); 
} 
15 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
Bài tập 
1. Định nghĩa một quan hệ SinhVien, sau đó viết một 
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 
2. Viết chương trình C nhập ID của một sinh viên và 
in ra thông tin của sinh viên đó 
3. Viết chương trình C nhập tên của sinh viên và in ra 
thông tin những người có tên như đã nhập 
16 EE4509, EE6133 – HK2 2011/2012 
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội 
            Các file đính kèm theo tài liệu này:
 06_mysql_c_0992.pdf 06_mysql_c_0992.pdf