Chủ Nhật, 20 tháng 4, 2014

Tài liệu MySQL & C doc


LINK DOWNLOAD MIỄN PHÍ TÀI LIỆU "Tài liệu MySQL & C doc": http://123doc.vn/document/1049663-tai-lieu-mysql-c-doc.htm


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 <winsock.h>
#include <mysql.h>
 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 <winsock.h>
#include <mysql.h>
#include <stdlib.h>

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):
 http://dev.mysql.com/doc/refman/5.0/en/error-handling.html
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 khi 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

Không có nhận xét nào:

Đăng nhận xét