SQLite数据库---将复杂对象存入数据库

1.插入数据---这里BOOK是一个书类

#pragma makr 插入数据
- (void)insetIntoTableWithID:(int)nameID withName:(NSString *)name withSex:(NSString *)sex withBook:(Book *)abook
{

    // 对abook进行归档(先归档)
    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:abook forKey:abook.bookName]; // abook.bookName***key不能一样否则会覆盖
    [archiver finishEncoding];
    // sql语句
    NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO 'user_hh'('id','name','sex','book')VALUES(?, ?, ?,?)"];
    sqlite3_stmt *stmt = nil;
    int result = sqlite3_prepare(db, [sqlString UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        // 绑定字段
        // sql里面写了字段,字段从一开始
        sqlite3_bind_int(stmt, 1, nameID);
        sqlite3_bind_text(stmt, 2, [name UTF8String], -1, NULL);
        sqlite3_bind_text(stmt, 3, [sex UTF8String], -1, NULL);
        sqlite3_bind_blob(stmt, 4, [data bytes], (int)[data length], NULL);
        // 执行
        sqlite3_step(stmt);
    }
    // 结束
    sqlite3_finalize(stmt);

    // 插入语句
    /*
     NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO 'user_hh'('id','name','sex','book')VALUES('%d', '%@', '%@','%@')",nameID,name,sex,data];
    // 执行SQL语句
    int result = sqlite3_exec(db, [insertSql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"插入成功");
    }else{
    
        NSLog(@"插入失败");
    }
     */
  
}

2.查询数据库

#pragma mark 查询数据库
- (void)selectDataFromTable
{

    NSString *selectSql = [NSString stringWithFormat:@"SELECT *FROM 'user_hh'"];
   
    // 保存查询到的结果集
    sqlite3_stmt *stmt = nil;
    // 准备查询数据(预存取)
    int result = sqlite3_prepare(db, [selectSql UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        
        // 判断是否是最后一行,有没有必要继续下去
        // 这里用while循环 一行一行执行 ******不用if******
        while(sqlite3_step(stmt) == SQLITE_ROW) {
            // 拿出各列的数据
            
            // 1.拿出id列的数据
            int numberID = sqlite3_column_int(stmt, 0);
            
            // 2.拿出name列的数据
            const unsigned char *nameChar = sqlite3_column_text(stmt, 1);
            NSString *name = [NSString stringWithUTF8String:(const char *)nameChar];
            
            // 3.拿出sex列的数据
            const unsigned char *sexChar = sqlite3_column_text(stmt, 2);
            NSString *sex = [NSString stringWithUTF8String:(const char *)sexChar];
            
            // 4.拿出BOOK列   ******桥接******
            
            // NSData *data = (__bridge NSData *)(sqlite3_column_blob(stmt, 3));
            const void *bytes = (sqlite3_column_blob(stmt, 3));
            int length = sqlite3_column_bytes(stmt, 3);
            NSData *data = [[NSData alloc] initWithBytes:bytes length:length];
            
            // 反归档
            NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
            Book *thisBook = [unArchiver decodeObjectForKey:@"西游记"];
            [unArchiver finishDecoding]; // 结束反归档
            
            NSLog(@"%d %@ %@ %@",numberID,name,sex,thisBook.bookName);
        }
        
        // 结束查询 --- 重要 ****** 否则无法关闭数据库******
        sqlite3_finalize(stmt);
    }
}

3.这里BOOK类对属性需要编码和反编码(NSCoding协议)

-(void)encodeWithCoder:(NSCoder *)aCoder
{

    [aCoder encodeObject:self.bookName forKey:@"bookName"];
    
}
-(id)initWithCoder:(NSCoder *)aDecoder
{

    self = [super init];
    if (self) {
        self.bookName = [aDecoder decodeObjectForKey:@"bookName"];
    }
    return self;
}

 

转载于:https://www.cnblogs.com/bachl/p/4674329.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将数据存入SQLite数据库,您可以按照以下步骤操作: 1. 首先,在您的Android Studio项目中创建一个SQLite数据库的帮助类(SQLiteOpenHelper)。 2. 创建一个数据模型类,该类包含要存储的数据的属性。 3. 在数据库帮助类中,创建一个表格,该表格定义了数据模型类的属性以及它们的数据类型。 4. 实现向数据库中插入数据的方法,该方法将使用SQLiteOpenHelper的getWritableDatabase()方法打开数据库并将数据插入到表格中。 以下是一个示例代码,展示了如何将数据存入SQLite数据库: 首先,创建一个数据模型类,例如Person.java: ``` public class Person { private int id; private String name; private int age; public Person(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } } ``` 然后,在数据库帮助类中,创建一个表格,例如PersonTable.java: ``` public class PersonTable { public static final String TABLE_NAME = "person"; public static final String COLUMN_ID = "id"; public static final String COLUMN_NAME = "name"; public static final String COLUMN_AGE = "age"; public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT, " + COLUMN_AGE + " INTEGER)"; } ``` 最后,在数据库帮助类中,实现向数据库中插入数据的方法,例如DBHelper.java: ``` public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; private static final int DATABASE_VERSION = 1; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(PersonTable.CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Upgrade logic here } public void addPerson(Person person) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put(PersonTable.COLUMN_NAME, person.getName()); values.put(PersonTable.COLUMN_AGE, person.getAge()); db.insert(PersonTable.TABLE_NAME, null, values); db.close(); } } ``` 现在,您可以在应用程序的任何地方创建一个DBHelper对象,并调用addPerson()方法,将Person对象插入到数据库中: ``` DBHelper dbHelper = new DBHelper(context); Person person = new Person(1, "John", 30); dbHelper.addPerson(person); ``` 这是将数据存入SQLite数据库的基本过程。请注意,在实际应用中,您可能需要使用更复杂的查询来检索数据,或者使用更复杂的数据模型来存储数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值