5.8 DataLogging Form
5.8.3 Cách sử dụng SQLite trong Objectiv eC
Bước 1: Tạo kết nối đến file database SQLite:
Add file SQLite vào project.
Hình 5-47 Giao diện Add file SQLite vào Project
Add thư viện sqlite3 được hỗ trợ vào project. Ta chọn biểu tượng Project->Build Pases->Link Binary with Library. Rồi nhấp vào dấu cộng, sau đó đánh vào ô hiện ra chu sql sẽ xuất hiện ra 2 thư viện. Sau đó nhấn Add.
Page 96
Hình 5-48 Giao diện Add thư viện SQLite3 vào chương trình
Đây là đoạn Code tạo kết nối từ chương trình đến file SQLite tên ScadaReport2.sqlite được sử dụng trong chương trình.
NSString *databaseName = @"ScadaReport2.sqlite";
NSArray *documentPaths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0]; NSString *databasePath = [documentsDir
stringByAppendingPathComponent:databaseName];
NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL success=[fileManager fileExistsAtPath:databasePath]; if (!success) {
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
Page 97
Bước 2: Lấy dữ liệu từ file database SQLite:
Hàm if(sqlite3_open(dbpath, &contactDB)==SQLITE_OK) giúp ta mở dữ liệu từ file SQL nếu kết nối thành công.
Bên trong hàm đó ta có thể lấy dữ liệu từ các cột và đưa vào mảng. Ví dụ đoạn Code dưới đậy lấy dữ liệu từ Column Task trong QSLite và lưu trong mảng arrayNumber:
Bước 3: Thêm và xóa dữ liệu từ file database SQLite:
Thêm dữ liệu (INSERT) :
Trước tiên ta phải mở file SQLite bằng hàm: if(sqlite3_open(dbpath, &contactDB)==SQLITE_OK)
Sau đó ta thêm dữ liệu bằng đoạn Code sau đây:
NSString *sql = [NSString stringWithFormat:@"INSERT INTO Task
VALUES('%@','%@','%@','%@','%@','%@','%@','%@','%@','%@')",number,tagDataLoggi ngTemp.device,
tagDataLoggingTemp.tagname,tagDataLoggingTemp.address,tagDataLoggingTemp.v alue,time,timeHour,myDayString,day,@"good"];
Dữ liệu sẽ được thêm theo từng hàng, ở đây file SQLite đang có 10 cột nên cần đưa đủ 10 thông số vào, nếu thiếu chương trình sẽ không thực hiện được.
Xóa dữ liệu (DELETE):
NSString *sql = @"SELECT * FROM Task"; constchar *query_stmt = [sql UTF8String];
if(sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement,
NULL)==SQLITE_OK){
while(sqlite3_step(statement)==SQLITE_ROW){ //chay tung dong NSString *Number = [[NSString alloc] initWithUTF8String:(const char*)sqlite3_column_text(statement, 0)];
[arrayNumber addObject:Number]; }
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
Page 98
Trước tiên ta phải mở file SQLite bằng hàm: if(sqlite3_open(dbpath, &contactDB)==SQLITE_OK)
Đoạn Code giúp ta delete dữ liệu từ một hàng là
NSString *sql = [NSString stringWithFormat:@"DELETE FROM Task WhERE Number=%i", [[arrayCount1 objectAtIndex:0] intValue]];
Trong file SQLite Task sẽ chứa các giá trị Number, theo cấu trúc trên ta sẽ xóa được các giá trị có number theo ý mình.