您好,欢迎访问一九零五行业门户网

Sqlite简单使用方法

sqlite简单使用方法 1.首先要添加 libsqlite3.dylib 库。在添加库的时候,你会发现有个libsqlite3.dylib 还有一个 libsqlite3.0.dylib。这样你就会疑问,两个的区别。这里介绍一下:实际上libsqlite3.dylib本身是个链接,它指向了libsqlite3.0.dylib。libsql
sqlite简单使用方法
1.首先要添加 libsqlite3.dylib 库。在添加库的时候,你会发现有个libsqlite3.dylib 还有一个 libsqlite3.0.dylib。这样你就会疑问,两个的区别。这里介绍一下:实际上libsqlite3.dylib本身是个链接,它指向了libsqlite3.0.dylib。libsqlite3.dylib总是指向最新的sqlite动态库。
2.在view中引入框架(2种方法)。
(1)#import    (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 */
其它类似信息

推荐信息