Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
233,33 KB
Nội dung
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
[...]... Sau khi th c hiện c u truy vấn, gọi hàm: 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ả: MYSQL_ RES* mysql_ store_result (MYSQL* conn) void mysql_ free_result (MYSQL_ RES* result) Di chuyển con trỏ đ c kết quả: 11 MYSQL_ ROW_OFFSET mysql_ row_seek (MYSQL_ RES*... 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,…) 12 my_ulonglong mysql_ affected_rows (MYSQL *mysql) 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... result, MYSQL_ ROW_OFFSET offset) MYSQL_ ROW_OFFSET mysql_ row_tell (MYSQL_ RES* result) EE4509, EE6133 – HK2 2011/2012 TS Đào Trung Kiên – ĐH Bách khoa Hà Nội Cc thông tin về kết quả trả về Số thu c tính (trường) c a kết quả: 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): unsigned int mysql_ num_fields (MYSQL_ RES* result) my_ulonglong mysql_ insert_id (MYSQL. .. 2011/2012 TS Đào Trung Kiên – ĐH Bách khoa Hà Nội Bài tập 1 2 3 16 Đị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 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 đó 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 EE4509, EE6133 –... 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... 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... c a một sinh viên và 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 thông tin những người c tên như đã nhập EE4509, EE6133 – HK2 2011/2012 TS Đào Trung Kiên – ĐH Bách khoa Hà Nội . – Đ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. 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