No.07 Xcode(5.x) 使用SQLite

来源:互联网 发布:wuli什么意思网络用语 编辑:程序博客网 时间:2024/05/22 13:46

在终端中使用SQLite3

在终端中涉及的命令有两种, 一个针对SQLite3本身, 另一个是针对数据库操作. 数据库命令必须以分号';'结尾.

也可以选择FMDB封装, 参考资料: http://www.it165.net/pro/html/201503/35539.html

SQLite3命令:

1)打开数据库, 注意:filePath中的空格需要转义, -column 搜索结果按列排列整齐, -header 搜索结果显示表头
SQLITE3 -column -header /Users/xxx.db

2)查看数据库中的所有表
.tables

3)查询数据库中的所有表的结构
.schema

4)退出SQLITE3
.quit

数据库命令:

1)创建表
CREATE TABLE user_info (userId INTEGER PRIMARY KEY AUTOINCREMENT, userName TEXT, userAge INTEGER);
CREATE TABLE IF NOT EXISTS user_info (userId INTEGER PRIMARY KEY AUTOINCREMENT, userName TEXT, userAge INTEGER);
CREATE TABLE user_info (userId INTEGER, userName TEXT, userAge INTEGER, PRIMARY KEY(userId, userName));

2)销毁表
DROP TABLE user_info;

3)修改表--增加一列
ALTER TABLE tab_name ADD COLUMN col_name TEXT;

4)修改表--修改表名, 注意:新的表名会被带上双引号
ALTER TABLE tab_name RENAME TO new_tab_name;

5)删除项
DELETE FROM user_info WHERE userName='saber';

6)添加项
INSERT INTO user_info(userName, userAge) VALUES('saber', 18);
INSERT INTO user_info(userName, userAge) VALUES('saber', 18), ('baserker', 22);
INSERT INTO mo_personmap (personid, belongid) SELECT b.id, b.departid FROM mo_person b;

6)替换或新增
REPLACE INTO user_info(userName, userAge) VALUES('saber', 18);

7)修改项
UPDATE user_info SET userAge=16 WHERE userName='saber';

8)查询项
SELECT * FROM user_info;

在代码中使用SQLite3

1)需要在工程配置中加入libsqlite3.dylib, 然后在代码中引入头文件sqlite3.h

2)程序因意外而中断时, 已经执行的数据库操作依然会保留下来

3)需要用到的接口函数大致如下

sqlite3_open打开或者创建数据库文件sqlite3_close关闭由sqlite3_open建立的连接sqlite3_execsqlite3_prepare_v2,sqlite3_step()和sqlite3_finalize()的封装,能让程序多次执行sql语句而不要写许多重复的代码sqlite3_prepare_v2可以理解为数据库操作的开始sqlite3_step可以理解为数据库操作的过程sqlite3_finalize可以理解为数据库操作的结束sqlite3_column_int
sqlite3_column_text
sqlite3_column_blobsqlite3_step时, 通过这些函数从数据库操作中取到某行列那个单元格的值

4)示例代码

#import "sqlite3.h"typedef void(^sqlite3_result)(sqlite3_stmt *ppStmt);int sqlite3_search(sqlite3 *db, const char *sql, sqlite3_result result){    sqlite3_stmt *statement = 0;        int ret = sqlite3_prepare_v2(db, sql, -1, &statement, NULL);    if (ret != SQLITE_OK)    {        NSLog(@"sqlite3_search failed. ret=%d, sql=%s", ret, sql);    }    else while (sqlite3_step(statement) == SQLITE_ROW)    {        result(statement);    }    sqlite3_finalize(statement);        return ret;}- (void)buttonClicked:(UIButton*)sender{        NSString *docuPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];    NSString *filePath = [docuPath stringByAppendingPathComponent:@"userinfo.dat"];    NSLog(@"%@", filePath);        // 启动程序时, 如果文件存在, 删除它    NSFileManager *fileManager = [NSFileManager defaultManager];    if ([fileManager fileExistsAtPath:filePath] == YES)        [fileManager removeItemAtPath:filePath error:nil];        sqlite3 *database = 0;    NSString *sql = nil;    char *err = 0;    int ret = 0;        // 打开或创建文件    ret = sqlite3_open(filePath.UTF8String, &database);    if (ret != SQLITE_OK)    {        NSLog(@"sqlite3_open failed. ret=%d", ret);        return;    }        // 创建表    sql = @"CREATE TABLE IF NOT EXISTS userinfo (userid INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT)";    ret = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &err);    if (ret != SQLITE_OK)    {        NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql);    }        // 插入数据    for (int i = 0; i < 4; i++)    {        sql = [NSString stringWithFormat:@"INSERT INTO userinfo (username, password) VALUES('name%02d', 'pswd%03d')", i, i];        ret = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &err);        if (ret != SQLITE_OK)        {            NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql);        }    }        // 删除数据    sql = @"DELETE FROM userinfo WHERE username='name02'";    ret = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &err);    if (ret != SQLITE_OK)    {        NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql);    }        // 修改数据    sql = @"UPDATE userinfo SET password='123456' WHERE username='name01'";    ret = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &err);    if (ret != SQLITE_OK)    {        NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql);    }        // 查询数据    sql = @"SELECT userid, username, password FROM userinfo";    ret = sqlite3_search(database, sql.UTF8String, ^(sqlite3_stmt *ppStmt) {        NSInteger userid   = sqlite3_column_int(ppStmt, 0);        NSString *username = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(ppStmt, 1)];        NSString *password = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(ppStmt, 2)];        NSLog(@"userid=%d, username='%@', password='%@'", userid, username, password);    });        // 关闭文件    sqlite3_close(database);}
0 0
原创粉丝点击