1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu MySQL & C doc

16 160 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề MySQL & C
Tác giả TS. Đào Trung Kiên
Trường học Đại học Bách khoa Hà Nội
Chuyên ngành EE4509, EE6133
Thể loại Bài giảng
Năm xuất bản 2011/2012
Thành phố Hà Nội
Định dạng
Số trang 16
Dung lượng 233,33 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 commentlib, "libmysql.lib"  Hoặc thêm vào danh sách các thư viện dịch

Trang 1

MySQL & C

Trang 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

2 EE4509, EE6133 – HK2 2011/2012

Trang 3

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:

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()

Trang 4

Thêm thư viện để liên kết

4 EE4509, EE6133 – HK2 2011/2012

Trang 5

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;

Trang 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ả

6 EE4509, EE6133 – HK2 2011/2012

Trang 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);

Trang 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;

} 8 EE4509, EE6133 – HK2 2011/2012

Trang 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

Trang 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

10 EE4509, EE6133 – HK2 2011/2012

Trang 11

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)

Trang 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)

12 EE4509, EE6133 – HK2 2011/2012

Trang 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);

Trang 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));

}

14 EE4509, EE6133 – HK2 2011/2012

Trang 15

Ví dụ - update

 if (mysql_query(conn, " update User

set level = 5

handle_error(conn);

else {

printf("%d rows updated\n",

mysql_affected_rows(conn));

}

Trang 16

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

Ngày đăng: 18/02/2014, 23:20

TỪ KHÓA LIÊN QUAN

w