关于SQLite的基本使用

来源:互联网 发布:hits算法题目 编辑:程序博客网 时间:2024/05/01 22:52

//SQLite的基本使用-Prefix.pch

1.

//

//  Prefix header

//

//  The contents of this file are implicitly included at the beginning of every source file.

//


#ifdef __OBJC__

    #import <Foundation/Foundation.h>

#endif


2.

//  Prefix header

//

//  The contents of this file are implicitly included at the beginning of every source file.

//


#import <Availability.h>


#ifndef __IPHONE_5_0

#warning "This project uses features only available in iOS SDK 5.0 and later."

#endif


#ifdef __OBJC__

    #import <UIKit/UIKit.h>

    #import <Foundation/Foundation.h>

#endif


生成SQL

#import <Foundation/Foundation.h>


int main(int argc,const char * argv[])

{


    @autoreleasepool {

        NSMutableString *sql = [NSMutableStringstring];

        

        NSArray *names =@[@"jack", @"rose", @"jim", @"jake"];

        

        for (int i =0; i<100; i++) {

            int index = arc4random()%names.count;

            NSString *namePre = names[index];

            

            NSString *name = [NSStringstringWithFormat:@"%@-%d", namePre,arc4random()%100];

            int age = arc4random() % 100;

            double score = arc4random() % 100;

            [sql appendFormat:@"insert into t_student (name, age, score) values('%@', %d, %f);\n", name, age, score];

        }

        ///Users/mc/Desktop/素材images

        ///Users/aplle/Desktop/student.sql

 [sql writeToFile:@"Users/mc/Desktop/student.sql"atomically:YESencoding:NSUTF8StringEncodingerror:nil];

    }

    return 0;

}


*****************************

#import <Foundation/Foundation.h>


int main(int argc,const char * argv[])

{


    @autoreleasepool {

        

        NSArray *names =@[@"西门抽血",@"西门抽筋",@"西门抽风",@"西门吹雪"];

        NSMutableString *sql = [NSMutableStringstring];

       for (int i =0; i<200; i++) {

           int ID = i + 1;

           int age = arc4random_uniform(20) +20;

           NSString *name = names[arc4random_uniform(names.count)];

            name = [name stringByAppendingFormat:@"-%d",arc4random_uniform(100)];

            [sql appendFormat:@"insert into t_student (id, name, age) values (%d, '%@', %d);\n", ID, name, age];

        }

        [sql writeToFile:@"/Users/apple/Desktop/students.sql"atomically:YESencoding:NSUTF8StringEncodingerror:nil];

       NSLog(@"\n%@", sql);

    }

   return 0;

}





插入数据:更改删除查询--->>>>>>>>>

#import "IWViewController.h"

#import <sqlite3.h>


@interface IWViewController ()

{

    sqlite3 *_db; // db代表着整个数据库,db是数据库实例

}

- (IBAction)insert;

- (IBAction)update;

- (IBAction)delete;

- (IBAction)query;

@end


@implementation IWViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

    

    // 0.获得沙盒中的数据库文件名

    NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYESlastObjectstringByAppendingPathComponent:@"student.sqlite"];

    

    // 1.创建(打开)数据库(如果数据库文件不存在,会自动创建)

    int result = sqlite3_open(filename.UTF8String, &_db);

    if (result == SQLITE_OK) {

        NSLog(@"成功打开数据库");

        

        // 2.创表

        const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);";

        char *errorMesg = NULL;

        int result = sqlite3_exec(_db, sql, NULLNULL, &errorMesg);

        if (result == SQLITE_OK) {

            NSLog(@"成功创建t_student");

        } else {

            NSLog(@"创建t_student表失败:%s", errorMesg);

        }

    } else {

        NSLog(@"打开数据库失败");

    }

}


- (IBAction)insert

{

    for (int i = 0; i<30; i++) {

        NSString *name = [NSString stringWithFormat:@"Jack-%d"arc4random()%100];

        int age = arc4random()%100;

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

        

        char *errorMesg = NULL;

        int result = sqlite3_exec(_db, sql.UTF8StringNULLNULL, &errorMesg);

        if (result == SQLITE_OK) {

            NSLog(@"成功添加数据");

        } else {

            NSLog(@"添加数据失败:%s", errorMesg);

        }

    }

}


- (IBAction)update

{


}


- (IBAction)delete

{

    

}


- (IBAction)query

{

    // SQL注入漏洞

    

    /**

     登录功能

     

     1.用户输入账号和密码

     * 账号:123' or 1 = 1 or '' = '

     * 密码:456654679

     

     2.拿到用户输入的账号和密码去数据库查询(查询有没有这个用户名和密码)

     select * from t_user where username = '123' and password = '456';

     

     

     select * from t_user where username = '123' and password = '456';

     */

    

    // 1.定义sql语句

    const char *sql = "select id, name, age from t_student where name = ?;";

    

    // 2.定义一个stmt存放结果集

    sqlite3_stmt *stmt = NULL;

    

    // 3.检测SQL语句的合法性

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

    if (result == SQLITE_OK) {

        NSLog(@"查询语句是合法的");

        

        // 设置占位符的内容

        sqlite3_bind_text(stmt, 1"jack", -1NULL);

        

        // 4.执行SQL语句,从结果集中取出数据

//        int stepResult = sqlite3_step(stmt);

        while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到一行数据

            // 获得这行对应的数据

            

            // 获得第0列的id

            int sid = sqlite3_column_int(stmt, 0);

            

            // 获得第1列的name

            const unsigned char *sname = sqlite3_column_text(stmt, 1);

            

            // 获得第2列的age

            int sage = sqlite3_column_int(stmt, 2);

            

            NSLog(@"%d %s %d", sid, sname, sage);

        }

    } else {

        NSLog(@"查询语句非合法");

    }

}

@end



2.*************************

#import "ViewController.h"

#import <sqlite3.h>


@interface ViewController ()

- (IBAction)insert;

- (IBAction)update;

- (IBAction)delete;

- (IBAction)select;

// db就是数据库的象征,如果要进行CRUD,得操作db这个实例

@property (nonatomic,assign) sqlite3 *db;

@end


@implementation HMViewController


- (void)viewDidLoad

{

    [superviewDidLoad];

    

    //获得数据库文件的路径

    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject];

    NSString *filename = [docstringByAppendingPathComponent:@"students.sqlite"];

    // OC字符串 转成 C语言字符串

   const char *cfilename = filename.UTF8String;

    // 1.打开数据库(如果数据库文件不存在,sqlite3_open函数会自动创建数据库文件)

   int result = sqlite3_open(cfilename, &_db);

   if (result == SQLITE_OK) {// 打开成功

       NSLog(@"成功打开数据库");

        

       // 2.创表

        constchar *sql ="CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);";

       char *erroMsg = NULL;

        result =sqlite3_exec(self.db, sql,NULL, NULL, &erroMsg);

       if (result == SQLITE_OK) {

           NSLog(@"成功创表");

        }else {

//            printf("创表失败--%s--%s-%d", erroMsg, __FILE__, __LINE__);

           NSLog(@"创表失败--%s--%@-%d", erroMsg, [NSStringstringWithUTF8String:__FILE__], __LINE__);

        }

    }else {

       NSLog(@"打开数据库失败");

    }

}


- (IBAction)insert {

   for (int i =0; i<20; i++) {

        // 1.拼接SQL语句

        NSString *name = [NSStringstringWithFormat:@"Jack-%d",arc4random_uniform(100)];

       int age = arc4random_uniform(20) +30;

        NSString *sql = [NSStringstringWithFormat:@"INSERT INTO t_student (name, age) VALUES ('%@', %d);", name, age];

        

        // 2.执行SQL语句

       char *erroMsg = NULL;

       sqlite3_exec(self.db, sql.UTF8String,NULL, NULL, &erroMsg);

       if (erroMsg) {

           NSLog(@"插入数据失败--%s", erroMsg);

        }else {

           NSLog(@"成功插入数据");

        }

    }

}


- (IBAction)update {

    

}


- (IBAction)delete {

    

}


- (IBAction)select {

    constchar *sql ="SELECT id, name, age FROM t_student WHERE age <= 30;";

    //进行查询前的准备工作

    // -1代表系统会自动计算SQL语句的长度

    // sqlite3_stmt:用来取数据

   sqlite3_stmt *stmt = NULL;

   if (sqlite3_prepare_v2(self.db, sql, -1, &stmt,NULL) == SQLITE_OK) {// SQL语句没有问题

       NSLog(@"查询语句没有问题");

        

        // 每调一次sqlite3_step函数,stmt就会指向下一条记录

       while (sqlite3_step(stmt) ==SQLITE_ROW) { // 找到一条记录

           // 取出数据

            

            // 取出第0列字段的值(int类型的值)

           int ID = sqlite3_column_int(stmt,0);

            

            // 取出第1列字段的值(tex类型的值)

           const unsignedchar *name = sqlite3_column_text(stmt,1);

            

            // 取出第2列字段的值(int类型的值)

           int age = sqlite3_column_int(stmt,2);

            

           NSLog(@"%d %s %d", ID, name, age);

        }

    }else {

       NSLog(@"查询语句有问题");

    }

}

@end




0 0
原创粉丝点击