objective-c连接MySQL数据库

当我搜索objective-c连接MySQL数据库,发现文章已经是很久之前的了,而且是错误的,一篇错,然后连续十几篇都接着错。

好,废话不多说,要连接数据库,首先你得安装MySQL,网上一大堆教程。安装完毕,你需要在终端上敲:mysql --version验证是否安装成功,如果有东西输出,说明你安装成功了。

关于怎么建立数据库,怎么建表,这里也不作描述,百度上搜索一大堆。我这里创建了一个叫"lws_db"的数据库,其中只有一个表。表包括id,name,sex,age,tel几个字段,如图所示:

sql语句如下:

create table students
(
   id int unsigned not null auto_increment primary key,
   name char(8) not null,
   sex char(4) not null,
   age tinyint unsigned not null,
   tel char(13) null default "-"
);

好了,数据库弄好了。接下来就要用代码连接数据库了。新建一个xCode项目,使用xCode 6.3.2版本,这里我选择了命令行项目。

由于,mysql驱动文件放在,这个目录下:/usr/local/mysql/include,所以需要在你的项目中配置头文件搜索路径,操作如图:

同时,你需要告诉编译器编译参数,在other linker flags添加:-L/usr/local/mysql/lib -lmysqlclient,如图所示:

好的,项目配置好了,接下来上代码:

新建一个类DBManager,用于管理数据库操作,代码如下:

.h文件

 1 #import <Foundation/Foundation.h>
 2
 3 @class Person;
 4
 5 @interface DBManager : NSObject
 6
 7 + (DBManager *)sharedManager;
 8
 9 - (NSArray *)getAllPersons;
10 - (void)addPerson:(Person *)p;
11 - (void)deletaPerson:(Person *)p;
12
13 @end

.m文件

  1 #import "DBManager.h"
  2 #import "mysql.h"
  3 #import "Person.h"
  4
  5 static const char *host_name = "localhost";
  6 static const char *user_name = "root";
  7 static const char *password = "root";
  8 static const char *db_name = "lws_db";
  9
 10 @interface DBManager() {
 11     MYSQL *_myconnect;
 12 }
 13 @end
 14
 15 @implementation DBManager
 16
 17 +(DBManager *)sharedManager
 18 {
 19     static DBManager *sharedSingleton = nil;
 20
 21     static dispatch_once_t onceToken;
 22
 23     dispatch_once(&onceToken,^(void) {
 24         sharedSingleton = [[self alloc] init];
 25     });
 26
 27     return sharedSingleton;
 28 }
 29
 30 - (instancetype)init {
 31     if (self = [super init]) {
 32         //初始化工作
 33         _myconnect = mysql_init(_myconnect);
 34         _myconnect = mysql_real_connect(_myconnect,host_name,user_name,password,db_name,MYSQL_PORT,NULL,0);
 35         mysql_set_character_set(_myconnect, "utf8");
 36
 37         if (_myconnect != NULL) {
 38             NSLog(@"连接成功");
 39         } else {
 40            NSLog(@"连接失败");
 41         }
 42     }
 43     return self;
 44 }
 45
 46 - (NSArray *)getAllPersons {
 47
 48     if (_myconnect == NULL) {
 49         return nil;
 50     }
 51
 52    int status = mysql_query(_myconnect, "select * from students");//status=0,表示query成功
 53
 54     if (status != 0) {
 55         NSLog(@"查询数据失败");
 56     }
 57
 58     MYSQL_RES *result = mysql_store_result(_myconnect);//拿到结果集
 59
 60     long long rows =result->row_count;             //一共查询到多少行
 61
 62     NSMutableArray *rowArray = [NSMutableArray arrayWithCapacity:rows];//创建数组保存数据
 63
 64    unsigned int fieldCount = mysql_field_count(_myconnect);//字段个数
 65
 66     MYSQL_ROW col;//用于保存一行的结果,其实就是一个字符串数组
 67
 68     for (int row = 0; row < rows; row++) {
 69
 70          NSMutableString *strM = [NSMutableString string];
 71
 72         if((col = mysql_fetch_row(result)))
 73         {
 75             for(int i = 0; i < fieldCount; i++)
 76             {
 77                 [strM appendString:[NSString stringWithUTF8String:col[i]]];//这里为了方便看结果,只返回字符串,而不是返回模型数组
 78                 [strM appendString:@" "];
 79             }
 80         }
 81         [rowArray addObject:strM];
 82     }
 84     return rowArray;
 85 }
 86
 87 - (void)addPerson:(Person *)p {
 88
 89     NSString *sql = [NSString stringWithFormat:@"insert into students (name, sex, age, tel) values(‘%@‘, ‘%@‘, ‘%@‘,‘%@‘)",p.name,p.sex,p.age,p.tel];
 90
 91     int status = mysql_query(_myconnect, [sql UTF8String]);//status=0,表示query成功
 92
 93     if (status == 0) {
 94         NSLog(@"插入数据成功");
 95     } else {
 96         NSLog(@"插入数据失败");
 97     }
 98 }
 99
100 - (void)deletaPerson:(Person *)p {
101
102     NSString *sql = [NSString stringWithFormat:@"delete from students where id=%@",p.ID];
103
104     int status = mysql_query(_myconnect, [sql UTF8String]);//status=0,表示query成功
105     if (status == 0) {
106         NSLog(@"删除数据成功");
107     } else {
108         NSLog(@"删除数据失败");
109     }
110 }
112 @end

main函数里面:

#import <Foundation/Foundation.h>
#import "DBManager.h"
#import "Person.h"

void test() {
    DBManager *mgr = [DBManager sharedManager];
    //查询数据
    NSArray *array = [mgr getAllPersons];
    for (int i = 0; i < array.count; i++) {
        NSLog(@"%@",array[i]);
    }
    /*输出结果
     2015-06-27 15:01:29.290 MySqlTest[2451:145448] 连接成功
     2015-06-27 15:01:29.291 MySqlTest[2451:145448] 1 李文深 男 23 12345678910
     2015-06-27 15:01:29.291 MySqlTest[2451:145448] 2 张三 男 33 13099881235
     2015-06-27 15:01:29.291 MySqlTest[2451:145448] 3 李四 女 20 -
     2015-06-27 15:01:29.291 MySqlTest[2451:145448] 4 敌法师 男 8 18825694821
     */
     /*    person这个类的属性:    @property (nonatomic,copy) NSString *ID;    @property (nonatomic,copy) NSString *name;    @property (nonatomic,copy) NSString *sex;    @property (nonatomic,copy) NSString *age;    @property (nonatomic,copy) NSString *tel;    */

    //添加数据
    Person *p = [[Person alloc] init];
    p.name = @"传说哥";
    p.age = @"50";
    p.sex = @"男";
    p.tel = @"11111111111";
//    [mgr addPerson:p];

    /*
    //删除数据
    p.ID = @"1";
    [mgr deletaPerson:p];
    */
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        test();
    }
    return 0;
}

从DBManager这个类可以看出,MySQL驱动是以C语言api写成的,而在该类中,重新封装以objective-c接口暴露给调用者。当然笔者这里少了些很多判断性操作,也没关闭数据库,在实际项目中,还需要读者自己完善。

时间: 2024-11-05 20:21:28

objective-c连接MySQL数据库的相关文章

mybatis连接mysql数据库插入中文乱码

对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的时候,选择UTF-8字符集.我试过修改现有数据库字符集为UFT -8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???).重建库时选择字符集为UTF-8之后,中文正常显示了. 对于第二个问题,是这样 的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插

用MyEclipse10.0远程连接Mysql数据库服务器

说明:本文档所有的操作均在满足以下条件的情况下操作, A.远程Linux服务器已经安装好MySQL数据库 B.本地电脑可以ping通远程服务器 C.已经成功安装了Myeclipse 一.下载mysql-connector-java-3.1.14-bin.jar 这个是连接mysql数据库的驱动器. 下载地址: http://dev.mysql.com/downloads/connector/j/5.0.html 也可以到官方网站下载,网址如下:www.mysql.com 二.在Myeclipse

Linux系统Java连接Mysql数据库

Linux系统下Java连接Mysql数据库方法与Windows下类似,具体步骤如下: 下载JDBC(驱动):mysql-connector-java-5.1.37.tar.gz 解压下载的数据包:tar -zxvf mysql-connector-java-5.1.37.tar.gz 解压后,mysql-connector-java-5.1.29-bin.jar位于mysql-connector-java-5.1.29目录下. 配置解压后,mysql-connector-java-5.1.29

C#连接MySql数据库的方法

1.要连接MySql数据库必须首先下载MySql的连接.net的文件, 文件下载地址为http://download.csdn.net/detail/xiaoliu123586/91455792.解压缩刚才下载的mysql-connector-net-6.6.6-noinstall.zip文件,里面有几个版本选择,在这里我选V4, 选中V4.0中所有文件几个文件,然后添加到C#项目的引用中,然后就可以编写程序进行数据库的操作了. 3.数据库操作代码 InsertMySql.cs 1 using

hibernate简单连接mysql数据库配置

使用hibernate连接mysql数据库 1:项目搭建好之后,在lib包中添加必要的jar包,和mysql数据库驱动jar包: jar包可以在hibernate的下载包(hibernate3.3.2.GA)中找到,这里所需要的jar包是: hibernate3.jar,lib/required目录下的所有jar包; 连接数据库所需要的jar包:mysql-connector-java-5.1.7-bin.jar; 如图: 2:jar包引入后编写实体类及映射文件: 实体类是xx.java文件;映

Hibernate连接MySQL数据库乱码相关问题

1.查看MySQL字符编码 >show variables like 'character%'; #执行编码显示 其中character_set_client,character_set_results,character_set_connection三个运行变量是造成乱码的关键 2.修改MySQL编码格式为UTF8 编辑my.ini,(注意:不是utf-8,也要注意大小写) 找到客户端配置[client] 在下面添加 ### 默认字符集为utf8 default-character-set=u

QTP连接MYSQL数据库方法

1.首先安装mysql数据驱动,qtp在windows系统下操作连接mysql,所以下载mysql-connector-odbc-   5.1.8-win32.msi 下载地址:http://mysql.mirrors.pair.com/Downloads/Connector-ODBC/5.1/mysqlconnector-odbc-5.1.8-win32.msi 2.安装mysql驱动 ,默认安装即可. 3. 添加默认数据源 控制面板->管理工具->数据源ODBC->系统DNS->

MVC3、如何应用EntityFramework 连接MySql 数据库

原文:MVC3.如何应用EntityFramework 连接MySql 数据库 新的一年,新的开始. 今天总结的主题是在MySql中应用EntityFramework 的Code First模式. 开发环境:Win8 + MySql5.5 +VS 2012. 第一步是在数据库中新建一个表,具体字段如下图. 在表中添加若干数据: 数据建好之后,下面就是在项目中引用EntityFramework了. 二,在项目中新建一个实体类Product public class Product    {    

C语言连接MySQL数据库(课程设计总结)

刚结束课程设计,也预示着假期马上就要到来了.本次课程设计并不算难,无非就是让做一个XXX系统,实现用户的注册.登录.菜单管理.超级用户等等一些功能,到现在为止已经做过好几个了,所以基本流程都熟悉了!我觉的最值得总结的地方就是:C语言与数据库连接,这块内容!因为之前都是用文件实现的. ★平台 这次课程设计主要用到: ● VC ++ 6.0 ● mysql-5.0.18-win32 ● Navicat for MySQL(MySQL 图形化的工具) ★配置 在写代码之前首先要让编译器知道MySQL数

navicat软件设置连接mysql数据库

navicat软件设置连接mysql数据库 适用范围及演示使用工具 适用范围:mysql所有系列(含Linux和Windows系统下的mysql) 演示使用工具:Navicat 8.0 MySQL 演示系统:Windows2003系统 navicat连接mysql数据库设置方法/步骤 第1步:下载并安装navicat软件,本成功安装到自己电脑中,安装成功后打开开始菜单组中的navicat菜单下的"Navicat for MySQL"并单击打开. 第2步:单击navicat软件左上角中的