一鼓作气,今天继续学习了sqlite数据库在Xcode上的一些操作,主要是通过用oc代码进行salite表格的创建,删除,修改;以及对现有的表格数据进行增,删,改,查。虽然有点累,但是收获不小,感觉很充实,继续加油!

      

//把数据库sqlite3导入到工程(在Bulider Phrase 中的Linker中点击➕号,查找sqlite3文件,选择再添加即可)

    //打开数据库

    //提供C的字符串,c串时我们要打开数据库的完整路径和文件名

    NSString *path=NSHomeDirectory();//获得家的路径

    path=[path stringByAppendingPathComponent:@"mydb.sqlite"];

    NSLog(@"%@",path);

    sqlite3 *db;

    //打开数据库,如果没有这个数据库,就创建这个数据库的文件并且打开这个数据库,如果有这个数据库就直接打开该数据库

    sqlite3_open([path UTF8String], &db);

    int result=sqlite3_open([path UTF8String], &db);

    //判断打开数据库是否成功

    if (result!=SQLITE_OK) {

        NSLog(@"打开失败!");

    }

    //关闭数据库

    sqlite3_close(db);

    

    //提供C的字符串,c串时我们要打开数据库的完整路径和文件名

    NSString *path1=NSHomeDirectory();//获得家的路径

    path1=[path1 stringByAppendingPathComponent:@"mydb.sqlite"];

    sqlite3 *mydb;//创建一个数据库名叫mydb

    //打开数据库,如果没有这个数据库,就创建这个数据库的文件并且打开这个数据库,如果有这个数据库就直接打开该数据库

     sqlite3_open([path UTF8String], &mydb);

    //对数据库进行操作

    //定制一个sql表

    char *sql="create table if not exists t_student(name text,age integer)";

    char *err;//出错信息

    //运行sql,并返回运行结果

    result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

    //判断运行是否成功

    if (result!=SQLITE_OK) {

        NSLog(@"运行sql错误,error原因:%s",err);

    }

   /*

    //增

    NSString *name=self.nameText.text;

    NSString *age=self.ageText.text;

    //sql="insert into t_student(name,age) values('张三',22) ";

    NSString *sql1=[NSString stringWithFormat:@"insert into t_student(name,age) values('%@',%@)",name,age];

    //将OC的字符串转化为C字符串

    //[sql1 UTF8String];

    //运行sql,并返回运行结果

    result=sqlite3_exec(mydb,[sql1 UTF8String],NULL,NULL,&err);

    if (result!=SQLITE_OK)

    {

        NSLog(@"运行sql错误,error原因:%s",err);

    }

     */

    /*

    //增,(可以插入特殊字符,用绑定的方式)

    NSString *name=self.nameText.text;

    NSString *age=self.ageText.text;

    char *sql2="insert into t_student(name,age) values(?,?) ";

    sqlite3_stmt *stmt;//stmt本身为指向行的指针,故该定义为一个指向指针的指针,即表示一个二维数组

    //运行sql,并返回运行结果

    result=sqlite3_prepare_v2(mydb,sql2,-1,&stmt,NULL);

    if (result==SQLITE_OK)

    {

       // 绑定参数

        result=sqlite3_bind_text(stmt, 1, [name UTF8String],-1, NULL);

        //判断绑定姓名是否成功

        if (result!=SQLITE_OK) {

            NSLog(@"绑定姓名失败!!!");

        }

        // 绑定参数

        result=sqlite3_bind_int(stmt, 2, [age intValue]);

        //判断绑定姓名是否成功

        if (result!=SQLITE_OK) {

            NSLog(@"绑定年龄失败!!!");

        }

    }

    if (sqlite3_step(stmt)!=SQLITE_DONE)

    {

        NSLog(@"插入数据失败!!!");

    }

    sqlite3_finalize(stmt);

    */

    

   /*

    //删

    sql="delete from t_student where age=26";

    //运行sql,并返回运行结果

    result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

    //判断运行是否成功

    if (result!=SQLITE_OK) {

        NSLog(@"运行sql错误,error原因:%s",err);

    }

    */

    /*

    //删除,用绑定的方式

    NSString *name=self.nameText.text;

  //NSString *age=self.ageText.text;

    sqlite3_stmt *stmt;

    char * sql3="delete from t_student where name=?";

    //运行sql,并返回运行结果

    result=sqlite3_prepare_v2(mydb, sql3, -1, &stmt, NULL);

    //判断运行是否成功

    if (result==SQLITE_OK)

    {

        // 绑定参数

        result=sqlite3_bind_text(stmt, 1, [name UTF8String],-1, NULL);

        //判断绑定姓名是否成功

        if (result!=SQLITE_OK) {

            NSLog(@"绑定姓名失败!!!");

        }

        else

        {

        // 绑定参数

        result=sqlite3_step(stmt);

        //判断绑定姓名是否成功

            if(result!=SQLITE_DONE)

             {

               NSLog(@"删除失败!!!");

              }

        }

    }

    else

    {

        NSLog(@"绑定失败!!!");

    }

    sqlite3_finalize(stmt);

     */

    /*

    //改

    sql="update t_student set name='赵六' where age=22 ";

    //运行sql,并返回运行结果

    result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

    //判断运行是否成功

    if (result!=SQLITE_OK)

    {

        NSLog(@"运行sql错误,error原因:%s",err);

    }

     */

    //修改,用绑定的方式

    char *sql4="update t_student set name=? where age=?";

    NSString *name=self.nameText.text;

    NSString *age=self.ageText.text;

    BOOL bFlag=NO;

    sqlite3_stmt *stmt;

    result=sqlite3_prepare_v2(mydb, sql4 , -1, &stmt ,NULL);

    if (result==SQLITE_OK) {

        result=sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);

        if (result!=SQLITE_OK) {

            NSLog(@"绑定姓名失败!!!");

            bFlag=YES;

        }

        result=sqlite3_bind_int(stmt, 2, [age intValue]);

        if (result!=SQLITE_OK) {

            NSLog(@"绑定年龄失败!!!");

            bFlag=YES;

        }

        if (bFlag==NO) {

            result=sqlite3_step(stmt);

            if (result!=SQLITE_DONE) {

                NSLog(@"修改失败!!!");

            }

        }

    }

    else

    {

        NSLog(@"预处理失败(准备运行失败 )!!!");

    }

    //查

    

    sql="select * from t_student";

    result=sqlite3_prepare_v2(mydb, sql , -1, &stmt ,NULL);

    if (result==SQLITE_OK)

    {

        //遍历返回的结构

        while(sqlite3_step(stmt)==SQLITE_ROW)//的到返回结构的一行

        {

            char*name=(char*)sqlite3_column_text(stmt, 0);//的到返回结构的一列,其中0代表第一列,依次类推

            int age=sqlite3_column_int(stmt, 1);//的到返回结果的第二列

            NSString *strname=[NSString stringWithUTF8String:name];

            NSLog(@"name=%@,age=%d",strname,age);

        }

    }

    else

    {

        NSLog(@"预处理失败");

    }

    sqlite3_finalize(stmt);//释放层数占用的资源

    sqlite3_close(mydb);