日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

ios常用数据库、完美无缺

發布時間:2023/12/20 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios常用数据库、完美无缺 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

直接copy過去就能用,我們不用再去造輪子,現在的xocod9.4更加人性化了,不用再添加依賴庫,這點蘋果你讓我開始喜歡了,哈哈、

需要這兄弟拉進去的哈

下班標的1,2,3,4就是就截圖的4個文件,沒毛病老鐵。。。?

?

?

[TestDBModel clearTable]; ?//清空數據庫

?? ?

? ? NSLog(@"前[TestDBModel findAll]=%@",[TestDBModel findAll]);

? ? NSArray *arr1 = @[@"哈哈",@"嘻嘻",@"呵呵"];

?? ?

?? ?

? ? NSMutableArray *mArr = [[NSMutableArray alloc] init];

?? ?

? ? for (int i = 0; i < arr1.count; i++) {

? ? ? ? TestDBModel *test = [[TestDBModel alloc] init];

? ? ? ? test.name = arr1[i];

? ? ? ? if (i==1) {

? ? ? ? ? ? test.sexNum = 100;

? ? ? ? ? ? test.isDoctor = YES;

? ? ? ? }else{

? ? ? ? ? ? test.sexNum = i;

? ? ? ? ? ? test.isDoctor = NO;

? ? ? ? }

? ? ? ? [mArr addObject:test];

? ? }

? ? [TestDBModel saveObjects:mArr];

?? ?

?? ?

?? ?

?? ?

? ? NSLog(@"后[TestDBModel findAll]=%@",[TestDBModel findAll]);

?

?

===================1
//
// DBHelper.h
// Doctor
//
// Created by zrq on 15/10/8.
// Copyright ? 2015年 zrq. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "FMDB.h"

@interface DBHelper : NSObject

@property (nonatomic, retain, readonly) FMDatabaseQueue *dbQueue;

+ (DBHelper *)shareInstance;

+ (NSString *)dbPath;

- (BOOL)changeDBWithDirectoryName:(NSString *)directoryName;

@end

===================2
//
// DBHelper.m
// Doctor
//
// Created by zrq on 15/10/8.
// Copyright ? 2015年 zrq. All rights reserved.
//

#import "DBHelper.h"
#import "DBModel.h"
#import <objc/runtime.h>

@interface DBHelper()

@property (nonatomic, retain) FMDatabaseQueue *dbQueue;

@end


@implementation DBHelper

static DBHelper *_instance = nil;

+ (instancetype)shareInstance
{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_instance = [[super allocWithZone:NULL] init] ;
}) ;

return _instance;
}


+ (NSString *)dbPathWithDirectoryName:(NSString *)directoryName
{
NSString *docsdir = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSFileManager *filemanage = [NSFileManager defaultManager];
if (directoryName == nil || directoryName.length == 0) {
docsdir = [docsdir stringByAppendingPathComponent:@"ZrqDB"];
} else {
docsdir = [docsdir stringByAppendingPathComponent:directoryName];
}
BOOL isDir;
BOOL exit =[filemanage fileExistsAtPath:docsdir isDirectory:&isDir];
if (!exit || !isDir) {
[filemanage createDirectoryAtPath:docsdir withIntermediateDirectories:YES attributes:nil error:nil];
}
// NSString *dbpath = [docsdir stringByAppendingPathComponent:[NSString stringWithFormat:@"D%@.sqlite",UDString(DOCTOR_ID)]];
NSString *dbpath = [docsdir stringByAppendingPathComponent:[NSString stringWithFormat:@"D255.sqlite"]];
return dbpath;
}

+ (NSString *)dbPath
{
return [self dbPathWithDirectoryName:nil];
}

- (FMDatabaseQueue *)dbQueue
{
if (_dbQueue == nil) {
_dbQueue = [[FMDatabaseQueue alloc] initWithPath:[self.class dbPath]];
}
return _dbQueue;
}

- (BOOL)changeDBWithDirectoryName:(NSString *)directoryName
{
if (_instance.dbQueue) {
_instance.dbQueue = nil;
}
_instance.dbQueue = [[FMDatabaseQueue alloc] initWithPath:[DBHelper dbPathWithDirectoryName:directoryName]];

int numClasses;
Class *classes = NULL;
numClasses = objc_getClassList(NULL,0);

if (numClasses >0 )
{
classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
for (int i = 0; i < numClasses; i++) {
if (class_getSuperclass(classes[i]) == [DBModel class]){
id class = classes[i];
[class performSelector:@selector(createTable) withObject:nil];
}
}
free(classes);
}

return YES;
}

+ (id)allocWithZone:(struct _NSZone *)zone
{
return [DBHelper shareInstance];
}

- (id)copyWithZone:(struct _NSZone *)zone
{
return [DBHelper shareInstance];
}

#if ! __has_feature(objc_arc)
- (oneway void)release
{

}

- (id)autorelease
{
return _instance;
}

- (NSUInteger)retainCount
{
return 1;
}
#endif
@end

===================3
//
// DBModel.h
// Doctor
//
// Created by zrq on 15/10/8.
// Copyright ? 2015年 zrq. All rights reserved.
//

#import <Foundation/Foundation.h>

/** SQLite五種數據類型 */
#define SQLTEXT @"TEXT"
#define SQLINTEGER @"INTEGER"
#define SQLREAL @"REAL"
#define SQLBLOB @"BLOB"
#define SQLNULL @"NULL"
#define PrimaryKey @"primary key"

#define primaryId @"pk"

@interface DBModel : NSObject

/** 主鍵 id */
@property (nonatomic, assign) int pk;
/** 列名 */
@property (retain, readonly, nonatomic) NSMutableArray *columeNames;
/** 列類型 */
@property (retain, readonly, nonatomic) NSMutableArray *columeTypes;

/**
* 獲取該類的所有屬性
*/
+ (NSDictionary *)getPropertys;

/** 獲取所有屬性,包括主鍵 */
+ (NSDictionary *)getAllProperties;

/** 數據庫中是否存在表 */
+ (BOOL)isExistInTable;

/** 表中的字段*/
+ (NSArray *)getColumns;

/** 保存或更新
* 如果不存在主鍵,保存,
* 有主鍵,則更新
*/
- (BOOL)saveOrUpdate;
/** 保存單個數據 */
- (BOOL)save;
/** 批量保存數據 */
+ (BOOL)saveObjects:(NSArray *)array;
/** 更新單個數據 */
- (BOOL)update;
/** 批量更新數據*/
+ (BOOL)updateObjects:(NSArray *)array;
/** 刪除單個數據 */
- (BOOL)deleteObject;
/** 批量刪除數據 */
+ (BOOL)deleteObjects:(NSArray *)array;
/** 通過條件刪除數據 */
+ (BOOL)deleteObjectsByCriteria:(NSString *)criteria;
/** 通過條件刪除 (多參數)--2 */
+ (BOOL)deleteObjectsWithFormat:(NSString *)format, ...;
/** 清空表 */
+ (BOOL)clearTable;

/** 查詢全部數據 */
+ (NSArray *)findAll;

/** 通過主鍵查詢 */
+ (instancetype)findByPK:(int)inPk;
/** 通過條件查詢 */
+ (instancetype)findFirstWithFormat:(NSString *)format, ...;

/** 查找某條數據 */
+ (instancetype)findFirstByCriteria:(NSString *)criteria;

+ (NSArray *)findWithFormat:(NSString *)format, ...;

/** 通過條件查找數據
* 這樣可以進行分頁查詢 @" WHERE pk > 5 limit 10"
*/
+ (NSArray *)findByCriteria:(NSString *)criteria;
/**
* 創建表
* 如果已經創建,返回YES
*/
+ (BOOL)createTable;

#pragma mark - must be override method
/** 如果子類中有一些property不需要創建數據庫字段,那么這個方法必須在子類中重寫
*/
+ (NSArray *)transients;

?


@end

===================4
//
// DBModel.m
// Doctor
//
// Created by zrq on 15/10/8.
// Copyright ? 2015年 zrq. All rights reserved.
//

#import "DBModel.h"
#import <objc/runtime.h>
#import "DBHelper.h"

@implementation DBModel

#pragma mark - override method
+ (void)initialize
{
if (self != [DBModel self]) {
[self createTable];
}
}

- (instancetype)init
{
self = [super init];
if (self) {
NSDictionary *dic = [self.class getAllProperties];
_columeNames = [[NSMutableArray alloc] initWithArray:[dic objectForKey:@"name"]];
_columeTypes = [[NSMutableArray alloc] initWithArray:[dic objectForKey:@"type"]];
}

return self;
}

#pragma mark - base method
/**
* 獲取該類的所有屬性
*/
+ (NSDictionary *)getPropertys
{
NSMutableArray *proNames = [NSMutableArray array];
NSMutableArray *proTypes = [NSMutableArray array];
NSArray *theTransients = [[self class] transients];
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList([self class], &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
//獲取屬性名
NSString *propertyName = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
if ([theTransients containsObject:propertyName]) {
continue;
}
[proNames addObject:propertyName];
//獲取屬性類型等參數
NSString *propertyType = [NSString stringWithCString: property_getAttributes(property) encoding:NSUTF8StringEncoding];
/*
各種符號對應類型,部分類型在新版SDK中有所變化,如long 和long long
c char C unsigned char
i int I unsigned int
l long L unsigned long
s short S unsigned short
d double D unsigned double
f float F unsigned float
q long long Q unsigned long long
B BOOL
@ 對象類型 //指針 對象類型 如NSString 是@“NSString”


64位下long 和long long 都是Tq
SQLite 默認支持五種數據類型TEXT、INTEGER、REAL、BLOB、NULL
因為在項目中用的類型不多,故只考慮了少數類型
*/
if ([propertyType hasPrefix:@"T@"]) {
[proTypes addObject:SQLTEXT];
} else if ([propertyType hasPrefix:@"Ti"]||[propertyType hasPrefix:@"TI"]||[propertyType hasPrefix:@"Ts"]||[propertyType hasPrefix:@"TS"]||[propertyType hasPrefix:@"TB"]) {
[proTypes addObject:SQLINTEGER];
} else {
[proTypes addObject:SQLREAL];
}

}
free(properties);

return [NSDictionary dictionaryWithObjectsAndKeys:proNames,@"name",proTypes,@"type",nil];
}

/** 獲取所有屬性,包含主鍵pk */
+ (NSDictionary *)getAllProperties
{
NSDictionary *dict = [self.class getPropertys];
//NSLog(@"該類所有屬性:%@",[self.class getPropertys]);

NSMutableArray *proNames = [NSMutableArray array];
NSMutableArray *proTypes = [NSMutableArray array];
[proNames addObject:primaryId];
[proTypes addObject:[NSString stringWithFormat:@"%@ %@",SQLINTEGER,PrimaryKey]];
[proNames addObjectsFromArray:[dict objectForKey:@"name"]];
[proTypes addObjectsFromArray:[dict objectForKey:@"type"]];

//NSLog(@"%@",[NSDictionary dictionaryWithObjectsAndKeys:proNames,@"name",proTypes,@"type",nil]);
return [NSDictionary dictionaryWithObjectsAndKeys:proNames,@"name",proTypes,@"type",nil];
}

/** 數據庫中是否存在表 */
+ (BOOL)isExistInTable
{
__block BOOL res = NO;
DBHelper *jkDB = [DBHelper shareInstance];
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);
res = [db tableExists:tableName];
}];
return res;
}

/** 獲取列名 */
+ (NSArray *)getColumns
{
DBHelper *jkDB = [DBHelper shareInstance];
NSMutableArray *columns = [NSMutableArray array];
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);
FMResultSet *resultSet = [db getTableSchema:tableName];
while ([resultSet next]) {
NSString *column = [resultSet stringForColumn:@"name"];
[columns addObject:column];
}
}];
return [columns copy];
}

/**
* 創建表
* 如果已經創建,返回YES
*/
+ (BOOL)createTable
{
__block BOOL res = YES;
DBHelper *jkDB = [DBHelper shareInstance];
[jkDB.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
NSString *tableName = NSStringFromClass(self.class);

NSString *columeAndType = [self.class getColumeAndTypeString];
//NSLog(@"columeAndType= %@",columeAndType);
NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@(%@);",tableName,columeAndType];
if (![db executeUpdate:sql]) {
res = NO;
*rollback = YES;
return;
};

NSMutableArray *columns = [NSMutableArray array];
FMResultSet *resultSet = [db getTableSchema:tableName];
while ([resultSet next]) {
NSString *column = [resultSet stringForColumn:@"name"];
[columns addObject:column];
}
NSDictionary *dict = [self.class getAllProperties];
NSArray *properties = [dict objectForKey:@"name"];
NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)",columns];
//過濾數組
NSArray *resultArray = [properties filteredArrayUsingPredicate:filterPredicate];
for (NSString *column in resultArray) {
NSUInteger index = [properties indexOfObject:column];
NSString *proType = [[dict objectForKey:@"type"] objectAtIndex:index];
NSString *fieldSql = [NSString stringWithFormat:@"%@ %@",column,proType];
NSString *sql = [NSString stringWithFormat:@"ALTER TABLE %@ ADD COLUMN %@ ",NSStringFromClass(self.class),fieldSql];
if (![db executeUpdate:sql]) {
res = NO;
*rollback = YES;
return ;
}
}
}];

return res;
}

/**
* 創建表
* 如果已經創建,返回YES
*/
//+ (BOOL)createTable
//{
// FMDatabase *db = [FMDatabase databaseWithPath:[JKDBHelper dbPath]];
// if (![db open]) {
// NSLog(@"數據庫打開失敗!");
// return NO;
// }
//
// NSString *tableName = NSStringFromClass(self.class);
// NSString *columeAndType = [self.class getColumeAndTypeString];
// NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@(%@);",tableName,columeAndType];
// if (![db executeUpdate:sql]) {
// return NO;
// }
//
// NSMutableArray *columns = [NSMutableArray array];
// FMResultSet *resultSet = [db getTableSchema:tableName];
// while ([resultSet next]) {
// NSString *column = [resultSet stringForColumn:@"name"];
// [columns addObject:column];
// }
// NSDictionary *dict = [self.class getAllProperties];
// NSArray *properties = [dict objectForKey:@"name"];
// NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)",columns];
// //過濾數組
// NSArray *resultArray = [properties filteredArrayUsingPredicate:filterPredicate];
//
// for (NSString *column in resultArray) {
// NSUInteger index = [properties indexOfObject:column];
// NSString *proType = [[dict objectForKey:@"type"] objectAtIndex:index];
// NSString *fieldSql = [NSString stringWithFormat:@"%@ %@",column,proType];
// NSString *sql = [NSString stringWithFormat:@"ALTER TABLE %@ ADD COLUMN %@ ",NSStringFromClass(self.class),fieldSql];
// if (![db executeUpdate:sql]) {
// return NO;
// }
// }
// [db close];
// return YES;
//}

- (BOOL)saveOrUpdate
{
id primaryValue = [self valueForKey:primaryId];
if ([primaryValue intValue] <= 0) {
return [self save];
}

return [self update];
}

- (BOOL)save
{
NSString *tableName = NSStringFromClass(self.class);
NSMutableString *keyString = [NSMutableString string];
NSMutableString *valueString = [NSMutableString string];
NSMutableArray *insertValues = [NSMutableArray array];
for (int i = 0; i < self.columeNames.count; i++) {
NSString *proname = [self.columeNames objectAtIndex:i];
if ([proname isEqualToString:primaryId]) {
continue;
}
[keyString appendFormat:@"%@,", proname];
[valueString appendString:@"?,"];
id value = [self valueForKey:proname];
if (!value) {
value = @"";
}
[insertValues addObject:value];
}

[keyString deleteCharactersInRange:NSMakeRange(keyString.length - 1, 1)];
[valueString deleteCharactersInRange:NSMakeRange(valueString.length - 1, 1)];

DBHelper *jkDB = [DBHelper shareInstance];
__block BOOL res = NO;
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *sql = [NSString stringWithFormat:@"INSERT INTO %@(%@) VALUES (%@);", tableName, keyString, valueString];
res = [db executeUpdate:sql withArgumentsInArray:insertValues];
self.pk = res?[NSNumber numberWithLongLong:db.lastInsertRowId].intValue:0;
NSLog(res?@"插入成功":@"插入失敗");

}];
return res;
}

/** 批量保存用戶對象 */
+ (BOOL)saveObjects:(NSArray *)array
{
NSLog(@"BD保存002==>[DBModel class]= %@",[DBModel class]);
//判斷是否是JKBaseModel的子類
for (DBModel *model in array) {
if (![model isKindOfClass:[DBModel class]]) {
return NO;
}
}

__block BOOL res = YES;
DBHelper *jkDB = [DBHelper shareInstance];
// 如果要支持事務
[jkDB.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
for (DBModel *model in array) {
NSString *tableName = NSStringFromClass(model.class);
NSMutableString *keyString = [NSMutableString string];
NSMutableString *valueString = [NSMutableString string];
NSMutableArray *insertValues = [NSMutableArray array];
for (int i = 0; i < model.columeNames.count; i++) {
NSString *proname = [model.columeNames objectAtIndex:i];
if ([proname isEqualToString:primaryId]) {
continue;
}
[keyString appendFormat:@"%@,", proname];
[valueString appendString:@"?,"];
id value = [model valueForKey:proname];
if (!value) {
value = @"";
}
[insertValues addObject:value];
}
[keyString deleteCharactersInRange:NSMakeRange(keyString.length - 1, 1)];
[valueString deleteCharactersInRange:NSMakeRange(valueString.length - 1, 1)];

NSString *sql = [NSString stringWithFormat:@"INSERT INTO %@(%@) VALUES (%@);", tableName, keyString, valueString];
BOOL flag = [db executeUpdate:sql withArgumentsInArray:insertValues];
model.pk = flag?[NSNumber numberWithLongLong:db.lastInsertRowId].intValue:0;
NSLog(flag?@"插入成功":@"插入失敗");

if (!flag) {
res = NO;
*rollback = YES;
return;
}
}
}];
return res;
}

/** 更新單個對象 */
- (BOOL)update
{
DBHelper *jkDB = [DBHelper shareInstance];
__block BOOL res = NO;
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);
id primaryValue = [self valueForKey:primaryId];
if (!primaryValue || primaryValue <= 0) {
return ;
}
NSMutableString *keyString = [NSMutableString string];
NSMutableArray *updateValues = [NSMutableArray array];
for (int i = 0; i < self.columeNames.count; i++) {
NSString *proname = [self.columeNames objectAtIndex:i];
if ([proname isEqualToString:primaryId]) {
continue;
}
[keyString appendFormat:@" %@=?,", proname];
id value = [self valueForKey:proname];
if (!value) {
value = @"";
}
[updateValues addObject:value];
}

//刪除最后那個逗號
[keyString deleteCharactersInRange:NSMakeRange(keyString.length - 1, 1)];
NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE %@ = ?;", tableName, keyString, primaryId];
[updateValues addObject:primaryValue];
res = [db executeUpdate:sql withArgumentsInArray:updateValues];
NSLog(res?@"更新成功":@"更新失敗");
}];
return res;
}

/** 批量更新用戶對象*/
+ (BOOL)updateObjects:(NSArray *)array
{
for (DBModel *model in array) {
if (![model isKindOfClass:[DBModel class]]) {
return NO;
}
}
__block BOOL res = YES;
DBHelper *jkDB = [DBHelper shareInstance];
// 如果要支持事務
[jkDB.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
for (DBModel *model in array) {
NSString *tableName = NSStringFromClass(model.class);
id primaryValue = [model valueForKey:primaryId];
if (!primaryValue || primaryValue <= 0) {
res = NO;
*rollback = YES;
return;
}

NSMutableString *keyString = [NSMutableString string];
NSMutableArray *updateValues = [NSMutableArray array];
for (int i = 0; i < model.columeNames.count; i++) {
NSString *proname = [model.columeNames objectAtIndex:i];
if ([proname isEqualToString:primaryId]) {
continue;
}
[keyString appendFormat:@" %@=?,", proname];
id value = [model valueForKey:proname];
if (!value) {
value = @"";
}
[updateValues addObject:value];
}

//刪除最后那個逗號
[keyString deleteCharactersInRange:NSMakeRange(keyString.length - 1, 1)];
NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE %@=?;", tableName, keyString, primaryId];
[updateValues addObject:primaryValue];
BOOL flag = [db executeUpdate:sql withArgumentsInArray:updateValues];
NSLog(flag?@"更新成功":@"更新失敗");
if (!flag) {
res = NO;
*rollback = YES;
return;
}
}
}];

return res;
}

/** 刪除單個對象 */
- (BOOL)deleteObject
{
DBHelper *jkDB = [DBHelper shareInstance];
__block BOOL res = NO;
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);
id primaryValue = [self valueForKey:primaryId];
if (!primaryValue || primaryValue <= 0) {
return ;
}
NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?",tableName,primaryId];
res = [db executeUpdate:sql withArgumentsInArray:@[primaryValue]];
NSLog(res?@"刪除成功":@"刪除失敗");
}];
return res;
}

/** 批量刪除用戶對象 */
+ (BOOL)deleteObjects:(NSArray *)array
{
for (DBModel *model in array) {
if (![model isKindOfClass:[DBModel class]]) {
return NO;
}
}

__block BOOL res = YES;
DBHelper *jkDB = [DBHelper shareInstance];
// 如果要支持事務
[jkDB.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
for (DBModel *model in array) {
NSString *tableName = NSStringFromClass(model.class);
id primaryValue = [model valueForKey:primaryId];
if (!primaryValue || primaryValue <= 0) {
return ;
}

NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?",tableName,primaryId];
BOOL flag = [db executeUpdate:sql withArgumentsInArray:@[primaryValue]];
NSLog(flag?@"刪除成功":@"刪除失敗");
if (!flag) {
res = NO;
*rollback = YES;
return;
}
}
}];
return res;
}

/** 通過條件刪除數據 */
+ (BOOL)deleteObjectsByCriteria:(NSString *)criteria
{
DBHelper *jkDB = [DBHelper shareInstance];
__block BOOL res = NO;
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);
NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ %@ ",tableName,criteria];
res = [db executeUpdate:sql];
NSLog(res?@"刪除成功":@"刪除失敗");
}];
return res;
}

/** 通過條件刪除 (多參數)--2 */
+ (BOOL)deleteObjectsWithFormat:(NSString *)format, ...
{
va_list ap;
va_start(ap, format);
NSString *criteria = [[NSString alloc] initWithFormat:format locale:[NSLocale currentLocale] arguments:ap];
va_end(ap);

return [self deleteObjectsByCriteria:criteria];
}

/** 清空表 */
+ (BOOL)clearTable
{
DBHelper *jkDB = [DBHelper shareInstance];
__block BOOL res = NO;
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);

NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@",tableName];
res = [db executeUpdate:sql];
NSLog(res?@"清空成功":@"清空失敗");
}];
return res;
}

///0708DB
/** 查詢全部數據 */
+ (NSArray *)findAll
{
NSLog(@"jkdb---%s",__func__);
DBHelper *jkDB = [DBHelper shareInstance];
NSMutableArray *users = [NSMutableArray array];
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM %@",tableName];
FMResultSet *resultSet = [db executeQuery:sql];
while ([resultSet next]) {
DBModel *model = [[self.class alloc] init];
for (int i=0; i< model.columeNames.count; i++) {
NSString *columeName = [model.columeNames objectAtIndex:i];
NSString *columeType = [model.columeTypes objectAtIndex:i];
if ([columeType isEqualToString:SQLTEXT]) {
[model setValue:[resultSet stringForColumn:columeName] forKey:columeName];
} else {
[model setValue:[NSNumber numberWithLongLong:[resultSet longLongIntForColumn:columeName]] forKey:columeName];
}
}
[users addObject:model];
FMDBRelease(model);
}
}];

return users;
}

+ (instancetype)findFirstWithFormat:(NSString *)format, ...
{
va_list ap;
va_start(ap, format);
NSString *criteria = [[NSString alloc] initWithFormat:format locale:[NSLocale currentLocale] arguments:ap];
va_end(ap);

return [self findFirstByCriteria:criteria];
}

/** 查找某條數據 */
+ (instancetype)findFirstByCriteria:(NSString *)criteria
{
NSArray *results = [self.class findByCriteria:criteria];
if (results.count < 1) {
return nil;
}

return [results firstObject];
}

+ (instancetype)findByPK:(int)inPk
{
NSString *condition = [NSString stringWithFormat:@"WHERE %@=%d",primaryId,inPk];
return [self findFirstByCriteria:condition];
}

+ (NSArray *)findWithFormat:(NSString *)format, ...
{
va_list ap;
va_start(ap, format);
NSString *criteria = [[NSString alloc] initWithFormat:format locale:[NSLocale currentLocale] arguments:ap];
va_end(ap);

return [self findByCriteria:criteria];
}

/** 通過條件查找數據 */
+ (NSArray *)findByCriteria:(NSString *)criteria
{
DBHelper *jkDB = [DBHelper shareInstance];
NSMutableArray *users = [NSMutableArray array];
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
NSString *tableName = NSStringFromClass(self.class);
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM %@ %@",tableName,criteria];
FMResultSet *resultSet = [db executeQuery:sql];
while ([resultSet next]) {
DBModel *model = [[self.class alloc] init];
for (int i=0; i< model.columeNames.count; i++) {
NSString *columeName = [model.columeNames objectAtIndex:i];
NSString *columeType = [model.columeTypes objectAtIndex:i];
if ([columeType isEqualToString:SQLTEXT]) {
[model setValue:[resultSet stringForColumn:columeName] forKey:columeName];
} else {
[model setValue:[NSNumber numberWithLongLong:[resultSet longLongIntForColumn:columeName]] forKey:columeName];
}
}
[users addObject:model];
FMDBRelease(model);
}
}];

return users;
}

#pragma mark - util method
+ (NSString *)getColumeAndTypeString
{
NSMutableString* pars = [NSMutableString string];
NSDictionary *dict = [self.class getAllProperties];

NSMutableArray *proNames = [dict objectForKey:@"name"];
NSMutableArray *proTypes = [dict objectForKey:@"type"];

for (int i=0; i< proNames.count; i++) {
[pars appendFormat:@"%@ %@",[proNames objectAtIndex:i],[proTypes objectAtIndex:i]];
if(i+1 != proNames.count)
{
[pars appendString:@","];
}
}
return pars;
}

- (NSString *)description
{
NSString *result = @"";
NSDictionary *dict = [self.class getAllProperties];
NSMutableArray *proNames = [dict objectForKey:@"name"];
for (int i = 0; i < proNames.count; i++) {
NSString *proName = [proNames objectAtIndex:i];
id proValue = [self valueForKey:proName];
result = [result stringByAppendingFormat:@"%@:%@\n",proName,proValue];
}
return result;
}

#pragma mark - must be override method
/** 如果子類中有一些property不需要創建數據庫字段,那么這個方法必須在子類中重寫
*/
+ (NSArray *)transients
{
return [NSArray array];
}

?


@end

轉載于:https://www.cnblogs.com/cnxBK/p/9235217.html

總結

以上是生活随笔為你收集整理的ios常用数据库、完美无缺的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

www.狠狠操.com | 中文字幕一区二区三区四区久久 | 亚洲电影自拍 | 四虎影视成人精品国库在线观看 | 最近更新好看的中文字幕 | 欧美日韩在线视频观看 | 日韩免费不卡av | 成年人黄色免费看 | 怡红院久久| 久久免费电影 | 麻豆精品在线视频 | 97电院网手机版 | 最近免费观看的电影完整版 | 超碰免费观看 | 久久久国产精品人人片99精片欧美一 | 欧美性成人| 国产69久久久欧美一级 | 国产一卡在线 | 三级av在线免费观看 | 色亚洲激情 | 日韩专区一区二区 | 日韩在线观看高清 | 人人澡人 | 国内精品久久久久久中文字幕 | 成人久久久久 | 国产中文字幕亚洲 | 国产精品一区二区三区四区在线观看 | 91欧美国产| 黄色免费网站大全 | 黄色av观看 | 久久久久久久久久久精 | 亚洲黄色成人网 | 最新国产福利 | 精品资源在线 | 2019中文最近的2019中文在线 | 99精品国产兔费观看久久99 | 亚洲精品午夜aaa久久久 | 久久久精品国产一区二区三区 | 狠狠干我| 一区二区三区精品在线 | 六月天综合网 | 亚洲天堂色婷婷 | 婷婷午夜天 | 亚洲午夜精品福利 | 久草视频在线免费看 | 亚洲日日射 | 天天射狠狠干 | 久久99精品久久只有精品 | 日本狠狠色| 国产一区久久久 | 中文字幕一区二区三区在线观看 | 亚洲精品视频久久 | 久久免费看毛片 | 91久久久国产精品 | 国产小视频在线免费观看视频 | 免费91麻豆精品国产自产在线观看 | 婷婷色中文字幕 | 美女视频黄免费网站 | 夜夜夜草 | 天天色天天上天天操 | 成人免费视频播放 | 日p在线观看 | 欧美日韩国产在线精品 | 欧美ⅹxxxxxx | 国产超碰在线 | 91成人小视频 | 狠狠地操| 狠狠狠色 | 婷婷色网| 久久久不卡影院 | 日韩欧美视频一区二区 | 亚洲激情校园春色 | 色就是色综合 | 午夜av免费观看 | 欧美精品一级视频 | 久草新在线 | 最近日韩中文字幕中文 | 狠狠的操你 | 亚洲尺码电影av久久 | av不卡中文 | 激情久久一区二区三区 | 亚洲网久久 | 日韩美视频 | 欧美一区二区三区不卡 | 日韩精品在线视频 | 亚洲视频精品在线 | 国产原厂视频在线观看 | 国产一区精品在线 | 999精品在线 | 成人黄色大片在线观看 | 99色在线观看视频 | 国产韩国精品一区二区三区 | 日韩欧美xxx| 精品一区二区在线免费观看 | 国产91影视 | 日韩理论片在线 | 国产精品成人久久久久久久 | 狠狠干成人综合网 | 天天撸夜夜操 | 亚洲另类人人澡 | 日本中文字幕免费观看 | 在线只有精品 | 高潮久久久久久久久 | 黄色三级免费片 | 亚洲精品午夜国产va久久成人 | 午夜久久久久久久久 | 五月色综合 | 97精品国产手机 | 免费看成人av | 美女视频黄免费的 | 亚洲3级| 精品免费一区 | 午夜丰满寂寞少妇精品 | 成人精品视频 | 天天色棕合合合合合合 | 久久综合免费 | 日本性高潮视频 | 日韩精品一区二区在线 | 国产精品久久久久久久久久免费看 | 人人插人人射 | 精品视频专区 | 色狠狠干| 四虎www com | 精品一区二区在线播放 | 日韩欧美精品在线视频 | 在线观看免费视频你懂的 | 91亚洲精品久久久蜜桃网站 | 91探花国产综合在线精品 | 激情自拍av | 中文字幕在线视频免费播放 | 日韩天天综合 | 人人舔人人插 | 国产美腿白丝袜足在线av | a黄色大片 | 在线国产视频观看 | 国产一区电影在线观看 | 少妇自拍av | 91av在线免费观看 | www.色五月.com| 国产精品v欧美精品v日韩 | 九九视频在线观看视频6 | 国产小视频网站 | 久久影院精品 | 99久久精品网 | 91精品国产91久久久久 | 人人爽人人爽人人片av免 | 五月天综合激情 | 国产中的精品av小宝探花 | 免费观看国产成人 | 亚洲综合成人专区片 | 色吊丝在线永久观看最新版本 | 国产在线看一区 | 亚洲九九影院 | 国产91精品一区二区 | 亚洲国产精品久久久久久 | 黄色精品一区 | 久久激情小说 | 日日草视频 | 日本精品视频在线观看 | 国产精品久久久久久久午夜 | 国语对白少妇爽91 | 亚洲国产剧情av | 美女视频黄频大全免费 | 天天干天天操天天操 | 日本字幕网 | 美女网站视频免费都是黄 | 久久激情视频 久久 | 日本 在线 视频 中文 有码 | 日本久久电影 | 中文在线字幕免 | 久久99亚洲精品久久 | 亚洲黑丝少妇 | 韩日成人av | 色全色在线资源网 | 欧美先锋影音 | 久草视频一区 | 蜜桃传媒一区二区 | 亚洲五月激情 | 天天操夜夜摸 | 国产精品成人久久久久 | 久亚洲 | 久久这里只有精品1 | 国产精品九色 | 日本成人免费在线观看 | 国产精品久久久久一区二区国产 | 在线国产日韩 | 一级一级一片免费 | 亚洲国产精品人久久电影 | 日韩在线中文字幕视频 | 日韩在线电影一区 | 波多野结衣在线观看一区 | 精品一区二区av | 在线看一区 | 久久久久免费电影 | 手机av在线不卡 | 国产成人精品在线播放 | 日韩欧美综合在线视频 | 日本性视频 | 天天爽天天射 | 久久综合影音 | 免费看一级特黄a大片 | 五月激情电影 | 免费影视大全推荐 | 黄色视屏在线免费观看 | 在线91精品 | 手机色站| 去干成人网 | 久久久久久视频 | 欧美性色综合网 | 欧美日本中文字幕 | 91在线看片 | 欧美精品v国产精品 | 一区二区三区四区在线免费观看 | 亚洲一二区精品 | 日韩欧美99 | 国产亚洲aⅴaaaaaa毛片 | 2021国产在线| 国产麻豆精品久久 | 国产一区二区在线视频观看 | 国产精品精品久久久久久 | 日韩久久久久久 | 在线观看国产永久免费视频 | 久久99国产综合精品免费 | 亚洲精品国产精品乱码在线观看 | 国产自在线观看 | 国产va饥渴难耐女保洁员在线观看 | 日韩一区在线播放 | 国产91精品看黄网站 | 国产精品久久久久毛片大屁完整版 | 91精品免费在线观看 | 国产在线va| 四虎成人精品 | 久久午夜免费观看 | 一级片免费观看视频 | 精品一区 在线 | 五月香视频在线观看 | 永久黄网站色视频免费观看w | 麻豆视频免费看 | 久久99久久99久久 | 91视视频在线直接观看在线看网页在线看 | 99热99re6国产在线播放 | 久久久久久久久久久久电影 | 在线电影中文字幕 | 国产高清视频色在线www | 国内精品亚洲 | 亚洲国产片色 | 91人人爱 | 久久久www成人免费精品 | 久久五月天婷婷 | 91精品第一页 | 成人羞羞免费 | 国产精品国产三级国产aⅴ9色 | 国产精品免费久久久久 | 色视频在线观看 | 色综合a| av中文电影| 亚洲涩涩网 | 深夜福利视频在线观看 | 日韩中文字幕亚洲一区二区va在线 | 中文字幕在线观看免费 | 97香蕉久久超级碰碰高清版 | 深夜免费小视频 | 狠狠的干 | 亚洲涩综合 | 99精品免费久久久久久久久日本 | 国产视频一区二区在线播放 | 成人黄色视 | 伊人久久国产 | 99久久99热这里只有精品 | 精品在线免费视频 | 欧美一区二区三区不卡 | 在线免费av观看 | 日韩精品欧美视频 | 欧美成人xxxx | 波多野结衣视频在线 | 亚洲老妇xxxxxx| 日韩精品一区二区三区视频播放 | 在线观看爱爱视频 | 国产精品女同一区二区三区久久夜 | 91九色自拍 | 国产精品99久久久久久久久久久久 | 亚洲高清在线精品 | 深爱激情综合网 | 中文字幕无吗 | 国产99久久九九精品 | 91人人澡| 国产在线成人 | 在线观看精品 | 狠狠色丁香婷婷综合久小说久 | 亚洲香蕉在线观看 | 综合网在线视频 | 久久激情片 | 国产不卡av在线 | 亚洲在线免费视频 | 欧美网址在线观看 | 免费在线观看av电影 | 久久精品人 | 欧美日韩视频 | 999久久国产精品免费观看网站 | 久久精品一级片 | 九九热免费在线观看 | 精品亚洲一区二区三区 | 国精产品999国精产品岳 | 国内视频在线观看 | 国产精品久久久久9999 | 久草视频免费观 | a电影在线观看 | 国产成a人亚洲精v品在线观看 | av福利在线导航 | 色婷婷激情五月 | 丁香花中文字幕 | 国产精品一区二区久久 | 人人插超碰 | 久久99深爱久久99精品 | 久久午夜电影院 | 国内精品久久久久久久影视麻豆 | 国产日韩欧美在线看 | 国产在线中文 | 521色香蕉网站在线观看 | 亚洲美女免费精品视频在线观看 | av亚洲产国偷v产偷v自拍小说 | 又黄又爽的视频在线观看网站 | 色偷偷88888欧美精品久久 | 麻豆小视频在线观看 | av一区二区三区在线播放 | 免费进去里的视频 | 亚洲视频播放 | 亚洲国产精品500在线观看 | 欧美一区二视频在线免费观看 | 国产精品久久久久久吹潮天美传媒 | 免费久久99精品国产婷婷六月 | 日韩中文在线电影 | 免费人人干 | 人人dvd | 天天综合成人网 | 97碰碰视频| 91传媒91久久久 | 久久久久久久综合色一本 | 丁香婷婷综合激情五月色 | 欧美另类重口 | 欧美日韩在线看 | 日韩欧美在线中文字幕 | 国产999| 欧洲精品久久久久毛片完整版 | 日韩影视在线 | 国产男男gay做爰 | 7777xxxx| 97视频资源| 久久精品播放 | 国产在线探花 | www.黄色网.com| 五月婷婷综合在线视频 | 国产九色91 | 中文不卡视频 | 色老板在线 | 日韩精品视频在线观看免费 | 久久高清精品 | 麻豆一精品传二传媒短视频 | 麻豆极品| 国内丰满少妇猛烈精品播放 | av色一区| 97精品国产97久久久久久粉红 | 色噜噜狠狠色综合中国 | 久久久久亚洲国产 | www.天天操 | 丁香婷婷激情 | 九九久久精品视频 | 亚洲激情在线观看 | 亚洲一区不卡视频 | 91在线观看高清 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产中出在线观看 | japanese黑人亚洲人4k | 国产亚洲欧美在线视频 | 在线观看一区 | 久热电影| 中文字幕欧美日韩va免费视频 | 99婷婷狠狠成为人免费视频 | 黄网站色视频 | 91免费国产在线观看 | 日本久久久久久久久 | 亚洲专区欧美 | 国产综合福利在线 | 久久99久久99精品免视看婷婷 | 狠狠色狠狠色合久久伊人 | 免费的成人av| 午夜精品中文字幕 | 久久a v电影 | 精品一区精品二区 | 久久伊人热 | 国产成人精品女人久久久 | 国产黄在线观看 | 97超碰资源 | 91久草视频 | 色综合五月 | 久久久精品视频网站 | 五月天网页 | 国产高清久久久 | 欧美怡红院 | 亚洲国产精品成人va在线观看 | 色爽网站 | 国产糖心vlog在线观看 | 日韩二区在线观看 | 久久免费试看 | 狠狠狠色丁香婷婷综合久久五月 | 精品久操| 韩日视频在线 | 狠狠干天天操 | 日韩在线观看影院 | 精品av在线播放 | 免费看成人a | 免费看黄在线观看 | av成年人电影 | 欧美先锋影音 | 中文乱码视频在线观看 | 四虎影视成人精品 | 日本中文一区二区 | 天天干天天摸天天操 | 欧美三级高清 | 久久人人爽人人爽人人 | 色噜噜日韩精品一区二区三区视频 | 午夜丁香网 | 麻豆 videos | 特黄特黄的视频 | 日韩黄视频 | 日本中文字幕在线免费观看 | 国产99精品在线观看 | www.黄色片网站 | 久久久麻豆视频 | 精品在线一区二区三区 | 国产黄在线免费观看 | 国产免费二区 | 国产精品一区二区三区四 | 久久久久久久国产精品影院 | 国产品久精国精产拍 | 黄色91免费观看 | 久久久久网站 | av播放在线 | 亚洲日韩中文字幕在线播放 | 在线观看一区视频 | 日日夜夜操av | 夜夜躁狠狠燥 | 97超碰在线人人 | 色婷婷国产在线 | 国产国产人免费人成免费视频 | 激情五月网站 | 99这里只有久久精品视频 | 米奇影视7777 | 国产综合激情 | а中文在线天堂 | 成人h在线| 国产 日韩 欧美 在线 | 亚洲国产福利视频 | 国产96av| 中文字幕乱码电影 | 中文字幕超清在线免费 | 九九热免费精品视频 | 久久久久免费看 | 91精品一区二区在线观看 | 日日夜夜狠狠操 | 欧美成人免费在线 | 国产高清福利在线 | 中文字幕在线观看视频一区 | 国产黄色在线 | 91视频免费国产 | 中文字幕成人在线观看 | 欧美日韩视频在线观看一区二区 | 91成人天堂久久成人 | 日韩色区| 不卡视频在线看 | 99热99re6国产在线播放 | 中文字幕在线看 | 日韩中文字幕亚洲一区二区va在线 | 国产一区二区不卡视频 | 2024国产精品视频 | 九九免费观看视频 | 日韩偷拍精品 | 狠狠操夜夜 | 久久久国产精品一区二区中文 | 国产精品中文久久久久久久 | 一区三区视频在线观看 | 天天操天天舔天天爽 | 久久国产精品视频观看 | 国产电影一区二区三区四区 | 国产999在线 | 国产91粉嫩白浆在线观看 | 亚洲国产精品人久久电影 | 国产资源网 | 西西444www高清大胆 | 欧美日韩在线第一页 | 91麻豆看国产在线紧急地址 | 久久有精品| 亚洲精品xxxx| 中文字幕第一页在线视频 | 91麻豆精品国产91久久久久久久久 | 久久精品久久99 | 久久综合免费视频影院 | 午夜精品一区二区三区可下载 | 久久你懂的| 国产免费影院 | 日本中文字幕在线看 | 在线观看黄色免费视频 | av看片网 | 色黄www小说 | 亚洲精品视频第一页 | 欧美小视频在线观看 | 最近中文字幕高清字幕在线视频 | 久久99国产精品视频 | 午夜精品久久久久久久99 | 日韩r级在线 | 日韩在线视频国产 | www.天天射 | 婷婷精品国产欧美精品亚洲人人爽 | 2019中文在线观看 | 精品伦理一区二区三区 | 久久成人亚洲欧美电影 | 午夜男人影院 | 亚洲高清在线视频 | 国产精品九九九九九 | 亚洲成人精品久久久 | 精品国模一区二区 | 久久五月激情 | 国产亚洲精品日韩在线tv黄 | 亚洲欧美少妇 | 福利视频| 免费97视频 | 五月综合激情网 | 在线99视频| 国产精品网红直播 | 亚洲欧美在线视频免费 | 麻豆视屏 | 人人射人人插 | 91日韩在线| 亚洲精品中文在线 | 久久99热精品这里久久精品 | 国产福利91精品张津瑜 | 亚洲一级久久 | 亚洲精品国产精品久久99热 | 久久久国产精品一区二区三区 | 亚洲天堂精品 | 久久成人福利 | 中文字幕区 | 欧美激情精品久久久 | 日日碰狠狠躁久久躁综合网 | 免费观看成人网 | 久草视频免费播放 | 成人影视片 | 伊人久久国产 | 欧美另类69 | 精品国产视频在线 | 日韩免费av在线 | 久久久久综合精品福利啪啪 | a视频在线观看 | 国产四虎在线 | 啪啪精品 | 亚洲一区二区黄色 | 成人黄色小说网 | 日韩精品专区在线影院重磅 | 久久精品五月 | av福利免费 | 国产精品久久久久久欧美 | 日韩欧美一区视频 | 国产成人精品一区二区 | 日韩在线视频在线观看 | 久久爱影视i | 人人干人人上 | 国产成人精品综合久久久久99 | 日本黄色免费大片 | 天天操天天是 | 国产成视频在线观看 | 国产91勾搭技师精品 | 日韩在线理论 | 久久国产视屏 | 欧美最猛性xxxxx免费 | 日韩免费区 | 狠狠插天天干 | 国产日韩在线观看一区 | 性日韩欧美在线视频 | 国产主播99 | 亚洲精品资源 | 久久国产精品成人免费浪潮 | 久久丁香| 精品视频国产一区 | 日韩视频在线不卡 | 天天干天天插伊人网 | 成人免费观看在线视频 | 日韩av在线小说 | 黄色tv视频 | 91精品在线观看视频 | 三级在线播放视频 | 国产一区久久久 | 成年人在线免费看视频 | 一区二区三区国产欧美 | 久久精品a | 国产91全国探花系列在线播放 | 色天堂在线视频 | 久久99久久99久久 | 最近中文字幕免费大全 | 成人国产精品入口 | 丁香六月婷婷开心婷婷网 | 国产精品美女久久久久久久 | 成人av在线播放网站 | 91大片网站 | 中文字幕免费在线看 | 毛片区| 国产精品视频久久久 | 日本女人b | 在线日韩av| 色综合久久88色综合天天6 | 午夜精品一二三区 | 天天天操天天天干 | 天天做天天射 | www.com.日本一级 | 在线观看91久久久久久 | 日韩免费在线视频观看 | 97超碰人人澡 | 精品国产人成亚洲区 | 91视频大全 | 亚洲国产成人精品久久 | 亚洲永久av | 91视频免费看片 | 91精品国自产在线 | 精品国产成人av | 狠狠色丁香久久婷婷综合_中 | 国产精品久久久久久久午夜片 | 欧美日韩精品综合 | 亚洲精品午夜国产va久久成人 | 久久综合中文色婷婷 | 日本韩国中文字幕 | 日色在线视频 | 中文字幕电影网 | 五月天中文在线 | 亚洲精品久久久蜜臀下载官网 | 日韩伦理片一区二区三区 | 最新国产在线 | 午夜精品福利在线 | 四虎国产精 | 天堂av在线免费观看 | 国产福利专区 | 国产小视频免费在线网址 | 97人人超 | 九色福利视频 | 一区二区三区日韩在线观看 | 99热这里只有精品久久 | 国产精品24小时在线观看 | 97免费中文视频在线观看 | 九九九视频在线 | 国产高清免费av | 亚洲视频一区二区三区在线观看 | 日韩精品久久久久久久电影竹菊 | 日韩av手机在线观看 | 久久免费视频8 | 日韩免费中文字幕 | 国产一区二区免费看 | 国产中文视 | 欧美影片| 91九色蝌蚪视频网站 | 国产美女精品久久久 | 国产成人久久精品亚洲 | 亚洲免费公开视频 | 国产精品久久久久一区二区国产 | av在线播放快速免费阴 | 日本精品一区二区在线观看 | 亚洲毛片一区二区三区 | 在线观看第一页 | 久久丁香网 | 日韩免费播放 | 97夜夜澡人人双人人人喊 | av一级黄| 日日麻批40分钟视频免费观看 | 在线观看中文字幕2021 | 免费男女羞羞的视频网站中文字幕 | 一区二区精品 | 久久精品第一页 | 天天躁日日躁狠狠 | 久久精品99国产 | 久久看片网 | 五月婷婷电影网 | 这里只有精品视频在线观看 | 91黄色小网站 | 天天躁日日躁狠狠躁av中文 | 激情开心 | 丁香激情综合久久伊人久久 | 国产精品久久电影观看 | 999成人 | 成人三级网站在线观看 | 久久婷婷色综合 | 黄色av一级 | 精品夜夜嗨av一区二区三区 | 午夜精品一区二区三区在线观看 | 在线播放国产精品 | 久久第四色| 麻豆视传媒官网免费观看 | 91视频在线 | 久久激情网站 | 免费观看的黄色 | 欧美一区二区三区在线观看 | 在线亚洲午夜片av大片 | 日韩免费三区 | 中文字幕在线专区 | 久久精品中文字幕 | 免费高清在线观看成人 | 久久免费黄色网址 | 国产成人福利片 | 国产精品一区二区免费视频 | 国产成人黄色在线 | 亚洲精品综合久久 | 精品久久久影院 | av免费在线网 | 国产精品二区在线观看 | 日韩欧美v| 99精品国产一区二区三区麻豆 | 欧美天天射 | 五月天婷婷在线视频 | 久久,天天综合 | www.黄色网.com| 99视 | www.色午夜| 麻豆视频在线免费 | 久久免费在线观看 | 日韩欧美精品在线观看 | 国产午夜精品av一区二区 | 国产999精品久久久久久绿帽 | 中文字幕在线观看视频一区 | 国产黄色片一级三级 | 欧美激情视频免费看 | 日本不卡一区二区三区在线观看 | 中文字幕免费一区二区 | 久久国产精品一区二区 | 久久亚洲免费 | 午夜视频在线观看一区二区三区 | 久久av中文字幕片 | 日韩欧美一区二区在线观看 | 天天干夜夜干 | 中文字幕免费在线看 | 亚洲高清久久久 | 国产片网站 | 色资源网免费观看视频 | 欧洲亚洲精品 | 国产在线观看网站 | 综合久久久久久久 | 韩国av免费在线 | 天天舔天天射天天操 | 99久久www | 国产裸体bbb视频 | 看片网站黄 | 日韩三级视频 | 欧美日韩高清免费 | 久久精品99 | 日韩二区在线 | 97精品国产97久久久久久 | 久草热视频 | 色欧美视频 | 成人免费视频网站在线观看 | 亚洲午夜精品在线观看 | 国产我不卡 | 日韩免费高清在线观看 | 久久99电影 | 色婷婷av在线 | 亚洲精品国产精品久久99 | www.色爱 | 国产精品a久久 | 973理论片235影院9 | av短片在线 | 欧美成人精品欧美一级乱 | 色噜噜狠狠狠狠色综合 | 又粗又长又大又爽又黄少妇毛片 | 日韩精品在线视频免费观看 | 国产91在线看 | 日韩69av| 久久网站免费 | 亚洲二区精品 | 国产精品久久久久久久久久三级 | 狠狠躁日日躁狂躁夜夜躁 | 日韩动漫免费观看高清完整版在线观看 | 一区二区中文字幕在线播放 | 亚洲欧美日韩在线一区二区 | 日韩在线免费看 | 国产成人av电影在线观看 | 日韩精品在线看 | 精品久久网 | 国产一区播放 | 天天操天天弄 | 日韩国产欧美在线播放 | av色图天堂网 | 中文字幕免费不卡视频 | 西西444www大胆高清图片 | 日韩一级黄色片 | 欧美精品久久天天躁 | 久久人人爽人人爽人人片av软件 | 国产专区在线 | 青青河边草手机免费 | 久久久久 免费视频 | 亚洲成av人影院 | 夜夜操天天操 | 亚洲日韩欧美一区二区在线 | 成人av资源网站 | 中文字幕日韩免费视频 | 97免费在线观看 | 国产精品综合久久久久 | 国产午夜麻豆影院在线观看 | 国产精品网红福利 | 9999在线视频 | 香蕉成人在线视频 | 久久精选视频 | 日韩一区二区免费在线观看 | 久久精品麻豆 | av中文在线影视 | 美女福利视频一区二区 | 亚洲深爱激情 | 六月丁香婷婷网 | 高清av免费观看 | 一区二区精品久久 | 五月婷婷六月丁香 | 97色婷婷| 国产91在线观看 | 免费成人黄色av | 91理论片午午伦夜理片久久 | 一区二区三区在线免费观看视频 | 久久开心激情 | 日韩国产欧美在线视频 | 在线成人国产 | 婷婷在线视频观看 | 视频一区二区在线 | 日韩一区二区三区高清在线观看 | 色黄www小说 | 色综合婷婷久久 | 五月激情站 | 日韩亚洲国产中文字幕 | 美女网站在线观看 | 免费视频久久久久久久 | 久久综合久久久久88 | avsex| 免费看的黄色录像 | 色网站在线免费 | av线上看| 亚洲精品久久久久久久蜜桃 | 国产精品中文 | 成年人免费观看在线视频 | 激情综合网五月激情 | 国产免费不卡av | 国产精品亚州 | 色五月情| 日韩理论电影在线 | 免费看污污视频的网站 | 黄色小说18 | 伊人永久在线 | 久久五月情影视 | 欧美与欧洲交xxxx免费观看 | 国产成人精品三级 | 狠狠狠色丁香综合久久天下网 | 国产免费观看久久 | 久草在线观看资源 | 久久久久亚洲精品男人的天堂 | 97免费在线观看视频 | 色综合天天综合网国产成人网 | 午夜黄色影院 | 国产专区一 | 色欧美综合 | 美女天天操 | 久一久久 | 中文字幕色婷婷在线视频 | 精品一二三四视频 | 日韩在线中文字幕视频 | 欧美日韩中文在线观看 | 亚洲伊人第一页 | 久视频在线播放 | 91在线看视频 | 久久国产精品视频免费看 | 国产黄色在线看 | 精品少妇一区二区三区在线 | 久久久久综合 | 麻豆精品视频 | 亚色视频在线观看 | 色偷偷88888欧美精品久久久 | 超碰人人草 | 精品国产一区二区三区蜜臀 | 伊人午夜 | 在线日本看片免费人成视久网 | 精品一区 精品二区 | 精品字幕| 天天综合视频在线观看 | 色多多在线观看 | 超碰伊人网 | 亚洲精品乱码久久久一二三 | 日韩视频区 | 98超碰在线 | 亚洲精品高清视频 | 国内精品视频免费 | www.超碰97.com | 国产精品久久久久免费a∨ 欧美一级性生活片 | 免费观看性生活大片 | 伊甸园av在线| 99视频精品全部免费 在线 | 久久1区 | 操久在线 | 欧美日本啪啪无遮挡网站 | 在线看岛国av | 欧美亚洲国产一卡 | 久久精品综合一区 | 中文字幕在线观看一区 | 欧洲在线免费视频 | 久久最新视频 | 97超碰在线免费观看 | 国产精品久久久久久久久久免费 | 亚洲国产久 | 日韩av线观看 | 国产在线va| 丁香5月婷婷久久 | 国产裸体视频网站 | 免费亚洲视频 | 久久成年人网站 | 亚洲欧美久久 | 9999在线| 91少妇精拍在线播放 | 久久久九色精品国产一区二区三区 | 亚洲精品黄色片 | 国产一区二区在线影院 | 亚洲电影院 | 亚洲综合色丁香婷婷六月图片 | 亚洲视频资源在线 | 99精品久久99久久久久 | 午夜精品剧场 | 欧美午夜理伦三级在线观看 | 国产视频在线观看一区 | 麻豆国产网站 | 色综合久久99| 超碰av在线播放 | 五月天狠狠操 | 一区二区不卡 | 婷婷视频在线观看 | 三级av免费 | 国产精品久久久影视 | 一区二区三区精品在线视频 | 亚洲午夜久久久综合37日本 | 久草资源在线观看 | 午夜电影久久 | 高清av在线| 天天鲁一鲁摸一摸爽一爽 | 丝袜精品视频 | 狠狠狠色丁香婷婷综合久久五月 | 国产小视频精品 | 在线看片a| 久久综合九色综合久久久精品综合 | 黄色片免费电影 | 91精品1区2区| 欧美色精品天天在线观看视频 | 麻豆一二三精选视频 | 视频一区二区三区视频 | 久久久免费视频播放 | 国产精品久久久久久久久免费看 | 久青草视频 | 一区二区中文字幕在线 | 免费看一级黄色 | 97视频免费观看2区 亚洲视屏 | 悠悠av资源片 | 少妇bbbb搡bbbb搡bbbb | 精品国自产在线观看 | 久久五月天色综合 | 精品一区二区在线免费观看 | 97理论片| 亚洲aⅴ乱码精品成人区 | 久久久影视| 九九久久电影 | 久久久久久久久久久久久影院 | 亚洲一区二区精品3399 | 狠狠插天天干 | 99婷婷狠狠成为人免费视频 | 欧美日韩电影在线播放 | 国产精品乱码一区二三区 | 国产成人区 | 日韩欧美精品在线观看视频 | 天天摸天天干天天操天天射 | 麻豆手机在线 | 一区二区三区四区在线 | 成人在线观看你懂的 | 91av看片 | 最新av网址在线 | 成年人在线观看免费视频 | 国产精品一区二区美女视频免费看 | 免费日韩在线 | 日韩av图片 | 婷婷色网视频在线播放 | 亚洲综合在 | 国产精品麻豆果冻传媒在线播放 | 亚洲欧洲一级 | 四虎在线影视 | 久久精品最新 | 黄色毛片网站在线观看 | 日韩精品久久久久久久电影竹菊 | 国产亚洲91 | 亚洲黄色片一级 | 黄色软件在线观看 | 国产二区免费视频 | 欧美在线free| 超碰在线最新地址 | 日日爽天天 | 久久一级电影 |