通過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
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
// 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