SQLite的基本使用-範例程式碼

來源:互聯網
上載者:User

標籤:blog   http   ar   io   使用   sp   for   on   檔案   

SQLite的基本使用

//// IWViewController.m// 01-SQLite的基本使用//// Created by apple on 14-5-22.// Copyright (c) 2014年 itcast. All rights reserved.//#import "IWViewController.h"#import <sqlite3.h>@interface IWViewController (){ // 成員變數預設=NULL sqlite3 *_db; // db代表著整個資料庫,db是資料庫執行個體}- (IBAction)insert;- (IBAction)update;- (IBAction)delete;- (IBAction)query;@end@implementation IWViewController- (void)viewDidLoad{ [super viewDidLoad]; // 0.獲得沙箱中的資料庫檔案名 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; NSLog(@"filename=====%@",filename); // 1.建立(開啟)資料庫(如果資料庫檔案不存在,會自動建立資料庫main) int result = sqlite3_open(filename.UTF8String, &_db); if (result == SQLITE_OK) { NSLog(@"成功開啟資料庫"); // 2.創表 const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);"; // 為了嚴謹起見,凡是傳遞地址的,一般最初都要先清空。首先保證該變數是null 指標,而不是野指標。 char *errorMesg = NULL; // sqlite3_exec 執行SQL語句 // 參數解釋:第一個資料庫執行個體,第二個SQL語句,第三個sqlite3_exec語句執行成功後的回調,第四個回調要傳遞的東西,第五個錯誤資訊 // C語言的空是大寫的NULL // sqlite3_exec(<#sqlite3 *#>, <#const char *sql#>, <#int (*callback)(void *, int, char **, char **)#>, <#void *#>, <#char **errmsg#>) int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg); if (result == SQLITE_OK) { NSLog(@"成功建立t_student表"); } else { NSLog(@"建立t_student表失敗:%s", errorMesg);// %s用來列印C語言的字串 } } else { NSLog(@"開啟資料庫失敗"); }}- (IBAction)insert{ for (int i = 0; i<30; i++) { NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random()%100]; int age = arc4random()%100; NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values(‘%@‘, %d);", name, age]; char *errorMesg = NULL; int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg); if (result == SQLITE_OK) { NSLog(@"成功添加資料"); } else { NSLog(@"添加資料失敗:%s", errorMesg); } }}- (IBAction)query{ // SQL注入漏洞 /** 登入功能 1.使用者輸入帳號和密碼 * 帳號:123‘ or 1 = 1 or ‘‘ = ‘ * 密碼:456654679 2.拿到使用者輸入的帳號和密碼去資料庫查詢(查詢有沒有這個使用者名稱和密碼) select * from t_user where username = ‘123‘ and password = ‘456‘; select * from t_user where username = ‘123‘ and password = ‘456‘; */ // 1.定義sql語句 const char *sql = "select id, name, age from t_student where name = ?;"; // 2.定義一個stmt來存放結果集 sqlite3_stmt *stmt = NULL; // 3.檢測SQL語句的合法性 第三個參數:SQL語句的長度,這裡寫-1會自動幫我們算SQL字串的長度。最後一個參數:跟SQL語句尾部有關,此處先不寫。 int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@"查詢語句是合法的"); /** sqlite3_bind_text():大部分綁定函數都只有3個參數 第1個參數是sqlite3_stmt *類型 第2個參數指預留位置的位置,第一個預留位置的位置是1,不是0,代表第幾個問號 第3個參數指預留位置要綁定的值 第4個參數指在第3個參數中所傳遞資料的長度,對於C字串,傳遞-1會自動計算字串的長度 第5個參數是一個可選的函數回調,一般用於在語句執行後完成記憶體清理工作 sqlite_step():執行SQL語句,返回SQLITE_DONE代表成功執行完畢 sqlite_finalize():銷毀sqlite3_stmt *對象 */ // 設定預留位置的內容,用預留位置的方式,會自動檢測SQL注入情況,可有效防止SQL注入問題。 sqlite3_bind_text(stmt, 1, "jack", -1, NULL); // 4.執行SQL語句,從結果集中取出資料// int stepResult = sqlite3_step(stmt); while (sqlite3_step(stmt) == SQLITE_ROW) { // 查詢到一行資料 // 獲得這行對應的資料 // 獲得第0列的id int sid = sqlite3_column_int(stmt, 0); // 獲得第1列的name const unsigned char *sname = sqlite3_column_text(stmt, 1); // 獲得第2列的age int sage = sqlite3_column_int(stmt, 2); NSLog(@"%d %s %d", sid, sname, sage); } } else { NSLog(@"查詢語句非合法"); }}@end

 

SQLite的基本使用-範例程式碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.