sqlite3基本操作


一、終端操作

1.先進入項目的目錄里

//找到Documents路徑
NSLog(@"%@", NSHomeDirectory());

終端:

cd Documents/

2.創建數據庫

sqlite3 數據庫名稱(后綴可以隨便加)

sqlite3 db_student.sql

4.創建表(SQL語句)

create table if not exists t_student(id integer primary key autoincrement,name text,age integer);

5.刪除表

drop table t_student;

6.增刪改查(SQL語句)

insert into t_student(name,age) values('JianZe',11);
delete from student where id=2;
update student set name='jianze' where name='JianZe';
select * from t_student

 

注意:

.help 獲取幫助

.quit 退出數據庫

.schema 查看數據庫

 

二、代碼實現

1.創建數據庫

打開數據庫,如果數據庫不存在就創建

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"db_student.sql"]; int result = sqlite3_open([path UTF8String], &_sql); if (result == SQLITE_OK) { NSLog(@"打開數據庫成功"); } else { NSLog(@"打開數據庫失敗"); }

 

2.創建表 

 //1.創建sql語句
    NSString *createSql = @"create table t_student(id integer primary key autoincrement, name text, age integer)"; //2.執行語句 除了select之外都是通過這個執行
    int result = sqlite3_exec(_sql, [createSql UTF8String], NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"創建表成功"); } else { NSLog(@"創建表失敗"); }

3.增加數據

已知數據源

NSString *insertSql = @"insert into t_student(name,age) values('JianZe',20)"; if (sqlite3_exec(_sql, [insertSql UTF8String], NULL, NULL, NULL) == SQLITE_OK) { NSLog(@"插入數據成功"); } else { NSLog(@"插入數據失敗"); }

需要外部傳遞數據

 //占位符 ?
    NSString *insertSql = @"insert into t_student(name,age,icon) values(?,?,?)"; //預處理
    sqlite3_stmt *stmt = NULL; if (sqlite3_prepare(_sql, [insertSql UTF8String], -1, &stmt, NULL) == SQLITE_OK) { UIImage *img = [UIImage imageNamed:@"1"]; NSData *imgData = UIImagePNGRepresentation(img); //綁定數據 bind 有幾個問號就要綁定幾個
        sqlite3_bind_text(stmt, 1, "Yill", -1, NULL); sqlite3_bind_int(stmt, 2, 20); sqlite3_bind_blob(stmt, 3, [imgData bytes], (int)imgData.length, NULL); //將綁定的數據保存到數據庫
        if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"保存數據成功"); } else { NSLog(@"保存數據失敗"); } //釋放內存空間
 sqlite3_finalize(stmt); } else { NSLog(@"預處理失敗"); } 

4.改動數據

NSString *updateSql = @"update t_student set age=21 where id=1"; if (sqlite3_exec(_sql, [updateSql UTF8String], NULL, NULL, NULL) == SQLITE_OK) { NSLog(@"更新數據成功"); } else { NSLog(@"更新數據失敗"); }

5.查詢數據

 //關鍵字 limit 0,2 從哪個位置讀 每次讀幾個
    NSString *selectSql = @"select * from t_student limit 0,2"; //1.預處理 -1表示語句長度自己計算
    sqlite3_stmt *stmt = NULL; if (sqlite3_prepare(_sql, [selectSql UTF8String], -1, &stmt, NULL) == SQLITE_OK) { //2.一條一條讀取數據 如果有 返回值就是SQLITE_ROW
        while (sqlite3_step(stmt) == SQLITE_ROW) { //一列一列地去讀取每一條記錄 1表示列
            char *name = (char *)sqlite3_column_text(stmt, 1); int age = sqlite3_column_int(stmt, 2); NSData *data = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)]; NSLog(@"%s, %d, %@", name, age, [UIImage imageWithData:data]); } } else { NSLog(@"預處理失敗"); }

6.在已有的表中添加字段

NSString *alterSql = @"alter table t_student add icon blob"; if (sqlite3_exec(_sql, [alterSql UTF8String], NULL, NULL, NULL) == SQLITE_OK) { NSLog(@"添加字段成功"); } else { NSLog(@"添加字段失敗"); }

 

幫助文檔:http://www.w3school.com.cn/sql/sql_wildcards.asp

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM