当前位置:数据库 > SQLite >>

Sqlite简单使用方法

Sqlite简单使用方法
 
1.首先要添加 libsqlite3.dylib 库。在添加库的时候,你会发现有个libsqlite3.dylib 还有一个 libsqlite3.0.dylib。这样你就会疑问,两个的区别。这里介绍一下:实际上libsqlite3.dylib本身是个链接,它指向了libsqlite3.0.dylib。libsqlite3.dylib总是指向最新的sqlite动态库。
 
2.在view中引入框架(2种方法)。
 
 (1)#import <sqlite3.h>    (2)#import"/usr/include/sqlite3.h"  
  sqlite3 *database;
3.sqlite数据库是文件数据库,是保存在文件系统中的。在Documents下创建数据库(路径)。
 
    NSArray *documentsPath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
   NSString *databaseFilePath = [[documentsPathobjectAtIndex:0]stringByAppendingPathComponent:@"mydb"];
4.打开数据库
    if (sqlite3_open([databaseFilePathUTF8String], &database) ==SQLITE_OK) {
        NSLog(@"open sqlite db ok.");
    }
5.建表语句
    char *errorMsg;
    constchar *createSql ="create table if not exists persons(id integer primary key autoincrement, name text)";
   if (sqlite3_exec(database, createSql,NULL,NULL, &errorMsg) ==SQLITE_OK) {
        NSLog(@"create ok");
    }
6.向表中插入记录
    const char *insertSql ="insert into persons (name) values ('zhangsan')";
   if (sqlite3_exec(database, insertSql,NULL,NULL, &errorMsg) ==SQLITE_OK) {
        NSLog(@"insert ok.");
    }else{
       NSLog(@"error:%s",errorMsg);
       sqlite3_free(errorMsg);
    }
7.查询结果
    const char *selectSql ="select id,name from persons";
   sqlite3_stmt *statement;  
    if (sqlite3_prepare_v2(database, selectSql, -1, &statement, nil) == SQLITE_OK) {
        NSLog(@"select ok");
       while (sqlite3_step(statement) ==SQLITE_ROW) {
           int _id =sqlite3_column_int(statement,0);
            
           char *name = (char*)sqlite3_column_text(statement,1);
           NSString *nsAddressStr = [[NSStringalloc]initWithUTF8String:name];
            
           NSLog(@"id:%i  name:%@",_id,nsAddressStr);
        }
    }
8.关闭数据库
    sqlite3_close(database);
 
sqlite3 *database;数据库句柄
sqlite3_stmt    用于保存编译好的sql语句
sqlite3_open()  打开数据库,没有的时候创建数据库
sqlite3_exec()  执行非查询的sql语句
sqlite3_prepare() 准备sql语句,执行select语句
sqlite3_step()  再调用sqlite3_prepare后,使用这个函数在记录集中移动
sqlite3_finalize() 释放sql资源
sqlite3_close() 关闭数据库
 
sqlite3_bind_int(stmt,1,1);  //绑定第一个int参数
sqlite3_bind_text(stmt,2,[? UTF8String],-1,SQLITE_TRANSIENT);//绑定第二个字符串参数
 
记录集中获取字段
sqlite3_column_int()  取int类型数据
sqlite3_column_text() 取text型数据
sqlite3_column_blob() 取blob型数据
 
 
#define SQLITE_OK           0   /* Successful result */
/* beginning-of-error-codes */
#define SQLITE_ERROR        1   /* SQL error or missing database */
#define SQLITE_INTERNAL     2   /* Internal logic error in SQLite */
#define SQLITE_PERM         3   /* Access permission denied */
#define SQLITE_ABORT        4   /* Callback routine requested an abort */
#define SQLITE_BUSY         5   /* The database file is locked */
#define SQLITE_LOCKED       6   /* A table in the database is locked */
#define SQLITE_NOMEM        7   /* A malloc() failed */
#define SQLITE_READONLY     8   /* Attempt to write a readonly database */
#define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite3_interrupt()*/
#define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
#define SQLITE_CORRUPT     11   /* The database disk image is malformed */
#define SQLITE_NOTFOUND    12   /* NOT USED. Table or record not found */
#define SQLITE_FULL        13   /* Insertion failed because database is full */
#define SQLITE_CANTOPEN    14   /* Unable to open the database file */
#define SQLITE_PROTOCOL    15   /* NOT USED. Database lock protocol error */
#define SQLITE_EMPTY       16   /* Database is empty */
#define SQLITE_SCHEMA      17   /* The database schema changed */
#define SQLITE_TOOBIG      18   /* String or BLOB exceeds size limit */
#define SQLITE_CONSTRAINT  19   /* Abort due to constraint violation */
#define SQLITE_MISMATCH    20   /* Data type mismatch */
#define SQLITE_MISUSE      21   /* Library used incorrectly */
#define SQLITE_NOLFS       22   /* Uses OS features not supported on host */
#define SQLITE_AUTH        23   /* Authorization denied */
#define SQLITE_FORMAT      24   /* Auxiliary database format error */
#define SQLITE_RANGE       25   /* 2nd parameter to sqlite3_bind out of range */
#define SQLITE_NOTADB      26   /* File opened that is not a database file */
#define SQLITE_ROW         100  /* sqlite3_step() has another row ready */
#define SQLITE_DONE        101  /* sqlite3_step() has finished executing */ 
 
当调用 sqlite3_prepare_v2() 函数的时候,是一个将SQL语句编译为sqlite内部一个结构体(sqlite3_stmt).
 
该结构体中包含了将要执行的的SQL语句的信息.
 
通常情况下,应该是返回0。还有一些时候是返回其他数值。
 
我以1为例,简单介绍一下错误解决的思路和方法:
 
 #define SQLITE_ERROR        1   /* SQL error or missing database */
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,