封装数据库

#import "DBManager.h"
#import "FMDatabase.h"
@implementation DBManager
{
    FMDatabase *_fmdb;
    NSLock *_lock;
}
+(DBManager *)shareManager{
    static DBManager *manager=nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        if (manager==nil) {
            manager=[[DBManager alloc]init];
        }
    });
    return manager;
}

-(id)init{
    self=[super init];
    if (self) {
        
        _lock=[[NSLock alloc]init];
        
//        [_lock lock];  加锁
//        [_lock unlock];  解锁
        
        NSString *path=[NSHomeDirectory() stringByAppendingString:@"/Documents/user.db"];
        _fmdb=[[FMDatabase alloc]initWithPath:path];
        if ([_fmdb open]) {
            NSString *[email protected]"create table if not exists userInfo(id integer primary key autoincrement,name varchar(256),age integer,image blob)";//创建一个userInfo表,表中有id、name、age、image 四个属性。 blob 是用来存储2进制的。 integer 整型varchar(256) 字符型
            // create table if not exists 表名(属性 属性的类型,属性 属性的类型)
            //primary key 主键 autoincrement 自增
            BOOL success=[_fmdb executeUpdate:createSql];
            if (!success) {
                NSLog(@"create:%@",_fmdb.lastError);
            }
        }
    }
    return self;
}
// 插入数据
-(void)insertModel:(UserModel *)model{
    [_lock lock];
    NSString *[email protected]"insert into userInfo(name,age,image) values(?,?,?)";
    //insert into 表名(属性名,属性名) values(?,?)
    UIImage *image=model.headImage;
    NSData *data=UIImagePNGRepresentation(image);//UIImagePNGRepresentation 这个方法是可以将png类型的图片转化成 NSData
    BOOL success=[_fmdb executeUpdate:insertSql,model.name,model.age,data];//executeUpdate 后面需要去接 继承与NSObject类所实例化的对象 否则会抛出EXC_BAD_ACCESS错误
    if (!success) {
        NSLog(@"%@",_fmdb.lastError);
    }
    [_lock unlock];
}
//删除数据
-(void)deleteDataWith:(NSNumber *)dataID{
    [_lock lock];
    NSString *[email protected]"delete from userInfo where id=?";// delete from 表名 where 属性=?
    BOOL success=[_fmdb executeUpdate:deleteSql,dataID];
    if (!success) {
        NSLog(@"%@",_fmdb.lastError);
    }
    [_lock unlock];
}

-(void)updateWith:(UserModel *)model{
    [_lock lock];
    NSString *[email protected]"update userInfo set name=?,age=?,image=? where id =?";// update 表名 set 属性名=?,属性名=? where 属性名=?
    UIImage *image=model.headImage;
    NSData *data=UIImagePNGRepresentation(image);
    NSNumber *IDNum=[NSNumber numberWithInteger:[model.id1 integerValue]];
    BOOL success=[_fmdb executeUpdate:updateSql,model.name,model.age,data,IDNum];
    if (!success) {
        NSLog(@"%@",_fmdb.lastError);
    }
    [_lock unlock];
}

-(NSArray *)selectAllData{
    [_lock lock];
    NSString *[email protected]"select * from userInfo";//* 查找全部 select * from 表名
    FMResultSet *set=[_fmdb executeQuery:selSQL];
    NSMutableArray *array=[[NSMutableArray alloc]init];
    while ([set next]) {
        UserModel *model=[[UserModel alloc]init];
        model.name=[set stringForColumn:@"name"];
        NSData *data=[set dataForColumn:@"image"];
        UIImage *image=[UIImage imageWithData:data];//把NSData类型的数据转化成image
        model.headImage=image;
        model.age=[NSNumber numberWithInteger:[[set stringForColumn:@"age"] integerValue]];
        [array addObject:model];
    }
    [_lock unlock];
    return [array copy];
}
// 查找一条语句是否存在
-(BOOL)isOrNotIN:(NSNumber *)idOne{
    NSString *[email protected]"select * from userInfo where id=?";//
    FMResultSet *set=[_fmdb executeQuery:sql];
    return [set next];
}

@end

时间: 2024-10-08 10:28:28

封装数据库的相关文章

PHP——封装数据库的函数(增,删,改)2014.5.15的总结

1:完整版的封装函数(增(insert),删(delete),改(update)) 例:<?php //编写数据库操作的封装函数 function mysql_bind(){ //首先我们不知道外面会传入多少个参数    //可以用func_get_args()方法来获取全部传入参数,这个方法返回全部参数的数组   //和func_get_args()方法相对应的其实还有一个func_num_args()来获取参数个数    $args = func_get_args();     //通过使用

封装数据库之增删改查

一.查询封装 1.建立成员变量属性 namespace _4_20封装数据库.App_Code { public class User { private int _Ids; public int Ids { get { return _Ids; } set { _Ids = value; } } private string _UserName; public string UserName { get { return _UserName; } set { _UserName = value

一天小结 php链接mysql 封装数据库

1:定义常量 define("HOST","127.0.0.1"); define("USER","rooot"); // 数据库用户 define("PWD","root"); // 密码 $conn="  "; function get_coon(){ global $conn; $conn = mysql_connect(HOST,USER,PWD) or di

面向对象基础----封装数据库操作类

思考:现在掌握了很多面向对象相关的内容,但是什么时候封装类?怎么封装?如果使用类成员? 引入:其实类的封装没有多么复杂,但是需要一个熟练的过程来确定哪些东西可以放到类里,该用什么样的形式等.我们通过封装一个数据库的操作来综合练习下 封装数据库类 掌握 定义:封装数据库操作类,即根据数据库的操作需求,来确认数据库操作类该有什么样的功能,以及这些功能该如何实现. 1.一个类通常就是一个文件,所以要先确定文件的名字:通常类文件命名规范有两种. 文件名字与类名一样,如Sql.php 为了区分普通php文

IOS开发-封装数据库sqlite3之为何选择FMDB

为什么使用第三方轻量级框架FMDB? FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过多的关心数据库操作的知识. 为什么不使用core data和SQLite? Core Data是ORM的一种体现,实现了界面化操作.使用Core Data需要用到模型数据的转化,虽然操作简单,不需要直接操作数据库,但是性能没有直接使用SQLite高.但是SQLi

封装数据库配置文件App配置文件

<connectionStrings>   <add name="strCon" connectionString="Data Source=.;Initial Catalog=DataManager;User ID=sa;Passwoed=lifatshit"/></connectionStrings> 封装表格 public static DataTable ExecuteDateTable(string sql, param

封装数据库查询方法

---恢复内容开始--- 对于数据繁琐的各式各样的查询语句,每次都要写上一大段查询代码,不仅造成代码冗余,而且还浪费时间.下面给出自己写的一个数据库查询方法封装: 1 public class AllSelect { 2 public static List<Object> Select(String sql,String className) throws Exception{ 3 //连接数据库 4 Connection conn = new MyConnection().getConne

【JDBC编程】Java 连接 MySQL 基本过程以及封装数据库工具类

鉴于linux系统下安装oracle数据库过于麻烦,而相关的java连接mysql基本方法的参考文章过少且参差不齐,故本人查阅了一些书和网络资料写下此文章. 从数据库环境搭建.基本语法到封装工具类全过程,可作为参考.转载请注明来源. 一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static connection getConnection(String u

封装数据库mysql, mysqli

<?php header("content-type:text/html;charset=utf-8"); class db{    //私有的静态属性    private static $dbcon = false ;    //私有的构造方法    private function __construct($dbname){        $dbcon = @mysql_connect('127.0.0.1', 'root', 'root');        mysql_s

JAVA学习笔记(五十一)- DBUtil 封装数据库工具类

数据库工具类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 数据库工具类 */ public class DBUtil { // 获取数据库连接 public static Connection getConnection() { String dr