1. 程式人生 > >通過model 得到 屬性名和屬性型別 放進資料庫

通過model 得到 屬性名和屬性型別 放進資料庫

#import <objc/runtime.h>

typedef NS_ENUM(NSUInteger, PropertyArrayType) {

    PropertyArrayTypeName,

    PropertyArrayTypeAttribute

};


+ (NSMutableArray *)arrayWithModel:(id)model

                              type:(PropertyArrayType)type{

    Class clazz = [model class];

    u_int count;

    objc_property_t

* properties = class_copyPropertyList(clazz, &count);

    NSMutableArray* propertyArray = [NSMutableArray arrayWithCapacity:count];

    NSMutableArray* attributeArray = [NSMutableArray arrayWithCapacity:count];

    for (int i = 0; i < count ; i++)

    {

        objc_property_t prop= properties[i];

        const char* propertyName = property_getName(prop);

        const char* attributeName = property_getAttributes(prop);

        [attributeArray addObject:[NSStringstringWithCString:attributeName encoding:NSUTF8StringEncoding]];

        [propertyArray addObject:[NSStringstringWithCString:propertyName

encoding:NSUTF8StringEncoding]];

//                const char* attributeName = property_getAttributes(prop);

//                NSLog(@"%@",[NSString stringWithUTF8String:propertyName]);

//                NSLog(@"%@",[NSString stringWithUTF8String:attributeName]);

    }

    free(properties);

    switch (type) {

casePropertyArrayTypeName:

            return propertyArray;

            break;

casePropertyArrayTypeAttribute:

            return attributeArray;

            break;

    }

return nil;

}

- (NSMutableArray *)selectALWithModel:(id)model{

//    NSString *sandBoxPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

//    NSString *path = [sandBoxPath stringByAppendingPathComponent:@"Student.sqlite"];

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

NSMutableArray *models = [[selfclass]arrayWithModel:model type:PropertyArrayTypeName];

NSMutableArray *modelAttributes = [[selfclass]arrayWithModel:model type:PropertyArrayTypeAttribute];

    NSLog(@"%@", modelAttributes);

    sqlite3_stmt *stmt = nil;

NSString *sqlStr = @"select * from stu";

    int result = sqlite3_prepare_v2(dbPoint, [sqlStr UTF8String], -1, &stmt, nil);

NSMutableArray *arr = [NSMutableArrayarray];

    if (result == SQLITE_OK) {

        NSLog(@"成功");

        while (sqlite3_step(stmt) == SQLITE_ROW){

            id temp = [model copy];

            for (int i = 1; i <= models.count; i++) {

                NSString *propName = models[i - 1];

                NSString *attributeName = modelAttributes[i - 1];

                SEL setterMothod = NSSelectorFromString([NSString stringWithFormat:@"set%@:", propName.capitalizedString]);

                if ([attributeName hasPrefix:@"Tq"]) {

                    int age = sqlite3_column_int(stmt, i);

                    [temp performSelector:setterMothod withObject:(NSInteger)age];

                } else if ([attributeName hasPrefix:@"[email protected]\"NSString\""]){

                    const unsigned char *pro = sqlite3_column_text(stmt, i);

                    NSString *modelPro = [NSString stringWithUTF8String:(const char *)pro];

                    [temp performSelector:setterMothod withObject:modelPro];}

            }

            [arr addObject:temp];

        }

    }else {

        NSLog(@"失敗");

    }

    return arr;

}

@end

// 建立表格

NSString *sqlStr = @"create table if not exists stu(number integer primary key autoincrement, name text ,sex text, age integer, hobby text)";

// 增

NSString *sqlsStr = [NSStringstringWithFormat:@"insert into stu (name, age , sex, hobby)\n values ('%@', '%ld', '%@', '%@')", stu.name, stu.age, stu.sex, stu.hobby];

// 改

NSString *sqlsStr = [NSStringstringWithFormat:@"update stu set name = '%@', sex = '%@', hobby = '%@', age = '%ld'  where name = '劉山山'", stu.name, stu.sex, stu.hobby, stu.age];

// 刪

NSString *sqlStr = [NSStringstringWithFormat:@"delete from stu where name = '%@'", stu.name];

// 呼叫

    int result = sqlite3_exec(dbPoint, [sqlsStr UTF8String], nil, nil, nil);


相關推薦

通過model 得到 屬性屬性型別 資料庫

#import <objc/runtime.h> typedef NS_ENUM(NSUInteger, PropertyArrayType) {     PropertyArrayTypeName,     PropertyArrayTypeAttri

反射獲取屬性屬性

 Map<String,Object> map = new HashMap<String,Object>();                 BeanInfo beanInfo = Introspector.getBeanInfo(fcd.getC

遍歷獲取物件屬性屬性

我們不但開發網站,我們還提供網站開發培訓! 郴州網站開發 QQ群:587978628 在JavaScript中,獲取簡單物件的屬性名和屬性值很容易,來看一個稍微複雜點的例子,遍歷獲取下面這個物件的屬性

mybatis 解決屬性字段不一致

圖片 數據 指定 文件 tis 分享圖片 密碼 技術 設計 1、 數據庫中表的設計 2、 實體類 3、mapper映射文件 4、 問題:密碼沒有獲取到 原因:mybatis會根據查詢的列名去進行設值 5、 解決列名和屬性名不一致的方法   5.1 為列名

MyBatis - 實體類的屬性資料庫列名不一致時的兩種解決辦法!

問題:兩者不一致時 , 查詢結果無法封裝到實體!(也就無法查詢出來) ① 查詢的sql語句中使用別名進行查詢. 但要注意: 欄位名的別名 要和 實體類的屬性名一致! UserMapper.xml <!-- namespace:介面的全路徑名.

【java學習筆記】MyBatis中當實體類中的屬性表中的欄位不一樣時的解決方法

在使用MyBatis開發DAO層時,當實體類中的屬性名和表中的欄位名不一樣時,查詢出來的值為null,此時有3種解決方法 解決方法1                在Mapper.xml對映檔案中,寫SQL語句時起別名 解決

mybatis學習總結---屬性欄位不一致問題

1. 查詢時使用別名,別名和屬性名保持一致 <select id="getUser" parameterType="int" resultType="com.skd.mybits.domain.User"> select id_dif id, name_dif n

mybatis學習總結---屬性字段不一致問題

strong users bsp 查詢 通過 select rop column lec 1. 查詢時使用別名,別名和屬性名保持一致 <select id="getUser" parameterType="int" resultType="com.skd

解決屬性列名不一致的問題

解決屬性名和列名不一致的問題 使用者物件: 資料庫表: 解決辦法 一 : 用 sql 對查詢的欄位重新命名 解決辦法 二 用配置檔案的形式修改返回結果集的屬性名(resultMap) 解決辦法 三 xml中開啟駝峰命名標識: <setti

區分 點操作符+屬性 getAttribute()

在用DOM操作控制HTML時,很多初學者會把 點操作符+屬性名 與getAttribute("屬性名") 混淆,誤以為這兩種方法是等價的。 實際上, 通過getAttribute("屬性名")和setAttribute("屬性名","屬性值") 可以獲取或修改標籤上的屬性值 通過

java通過反射獲取類屬性名稱以及@Table註解上的表名稱

import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Table; import java.lang.reflect.Field; import java.

Mybatis解決屬性欄位不一致

資料庫中表的設計 實體類 mapper對映檔案 測試 結果 問題:密碼沒有獲取到? 原因:mybatis會根據查詢的列名(會將列名轉為小寫)去進行設值(列名setter方法) 解決列名和屬性名不一致的方法 1 .為列名指定

swift3.0反射的到struct中的屬性屬性

struct Person{     var name:String     var age:Int     var height:Double? }let aPerson = Person(nam

spring中@RequestBody,bean中屬性json不一致解決方案

spring中@RequestBody,對應的bean中屬性名不一致解決方案參考資料:https://blog.csdn.net/renxyz/article/details/44734235sprin

java 反射機制--根據屬性獲取屬性

obj popu null tail tools pop 對象 href pro 1.考慮安全訪問範圍內的屬性,沒有權限訪問到的屬性不讀取 [java] view plain copy /** * 根據屬性名獲取屬性值 * *

** * 根據屬性獲取屬性值 * * @aram fie理直氣壯休假去高薪亦難換

jar 擴展 初始 task 圖片 休假 北京 不同 public Allure 是一個reor框架,支持多語言,多平臺。可以通過JuniTesngyes等產生的結果集生成酷炫好看的reor;同時也可以支持自定義字段,將你想展示 本文基於幾篇經典的論文,對 Aenion 模

js獲取物件屬性的兩種方法,object.屬性,[‘屬性’ ]

1、通過點的方式 2、通過括號的方式 例: <input type="text" value="hello" id="text"/> var oText = document.getElementById("text") (1)通過點的方式   oText.pr

獲取Java物件中所有的屬性名稱屬性

參考文章 1,首先我們建立一個Java實體類Person,並建立屬性name,age,gender,程式碼如下: public class Person { private String name

java反射機制根據屬性獲取屬性

一、考慮安全訪問範圍內的屬性,沒有許可權訪問到的屬性不讀取 /** * 根據屬性名獲取屬性值 * * @param fieldName * @param object * @return */ p

android根據屬性獲取屬性值方法

  private Object getFieldValueByName(String fieldName, Object o)     {         try         {             String firstLetter = fieldName.s