本篇博客我们来聊聊MySQL数据库的连接与操作。如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库。在Mac OS中使用brew包管理器进行MySQL的安装是及其方便的。安装MySQL的命令为:brew install mysql。本篇博客我们就要使用Perfect框架来连接操作数据库了,首先我们需要创建一个测试数据库,然后在测试数据库中创建一张测试表用来增删改查操作。

在博客的开头呢,先来推荐一款Mac上比较好用又免费的MySQL可视化管理工具Sequel Pro。这款工具用的是相当的顺手呢,应用的图标如下所示:

  

一、测试数据库的创建

本部分与Perfect框架无关,完全是MySQL的内容,是Perfect操作数据库的准备工作。前提是你已经安装好了MySQL数据库了。

1、启动MySQL的服务器

这一点虽然简单,但不要忘记启动你的MySQL服务呢,不然Sequel Pro是无法连接你的MySQL数据库的。具体启动方式如下。

  

启动是start,那么关闭MySQL数据库就是stop了,如下所示:

  

2.使用Sequel Pro连接操作数据库

(1)、连接MySQL数据库

打开Sequel Pro,输入你MySQL的主机名,用户名以及密码。具体连接那个数据库可以不选,然后填上具体的端口,默认是3306。点击连接即可。具体如下所示:

  

(2)、创建测试数据库

然后点击添加数据库,创建新的数据库即可,下方我们创建的是test数据库,编码方式用的是utf8。如下所示。

  

(3)、创建user表

创建完数据库后,接下来我们要创建一个user表用来进行测试。点击左下方的加号来创建新的数据库表,下方就是我们创建的数据库表的具体步骤以及具体的参数配置。如下所示:

  

创建完user表后,我们需要往表里边添加一些测试字段,下方就是我们添加的一些字段。在我们的user表中有下方四个字段,id是主键,用户的唯一标示。username-用户名,password-用户密码,create_time是创建时间,create_time的类型是时间戳,而且默认值是当前时间。具体如下所示。

  

二、Perfect数据库连接

万事俱备只欠东风,上面准备完MySQL数据库后,我们就要开始进行Perfect框架连接数据库的内容了。

1.引入依赖库

依照惯例,Perfect框架连接数据库依然需要包的支持。首先我们需要引入操作MySQL相关的包。

//MySql数据库依赖包

.Package(url: "https://github.com/PerfectlySoft/Perfect-MySQL.git",
majorVersion: 2, minor: 0)

下方是添加完上述的依赖包后,重新进行编译的结果:

  

2、数据库连接

下方代码段中的MySQLConnnet类就负责数据库的连接并且选择相应的数据库。下方是MySQLConnnet类的整体结构,host,port,user,password都是只读的计算属性,负责配置连接数据库的参数。而mysql属性就是连接数据库后的操作句柄。下方主要有两个方法,一个是连接数据库的方法connectDataBase()和选择数据库的方法selectDataBase()。MySQLConnnet类对外是以单例的形式存在的,不过对外暴漏的不是MySQLConnnet类的对象,而是MySQL类的对象。

  

接下来给出具体的代码实现,下方就是MySQLConnnet类的单例和私有构造器。具体实现如下所示:

  

下方是数据库的连接,核心语句就是下方红框中的内容。主要还是调用MySQL类中的connect()方法,在调用该方法时传入相应的参数即可。如果连接失败了会返回相应的errorMessage。具体代码如下所示:

  

连接完数据库后,然后是选择数据库,下方是选择数据库的代码。使用mysql句柄调用selectDataBase()方法,具体代码如下所示:

  

三、数据库操作

接下来我们就要调用上面的数据库操作类类操作具体数据库中的表了。在第一部分我们已经创建好了test数据库,并且创建好了相应的user表。接下来我们就要使用Swift代码来对User表进行增删改查操作了。

1.构建数据库操作基类

下方截图就是我们构建的数据库操作的基类,所有数据库表的操作都要继承自该基类,在基类中定义了操作数据库的名字dataBaseName,MySQL操作句柄mysql,以及响应json的格式responsJson。具体如下所示。

  

2.构建user表的操作类

下方的UserOperator类就是我们创建的专门来操作user表的类,主要是对user表的增删改查操作。insertUserInfo()负责“增”,即插入用户信息。deleteUser()负责“删”,通过userId来删除用户。updateUserInfo()就负责“改”,更新用户信息。queryUserInfo()就负责“查”了,负责从user表中通过用户名来查询信息。

  

(1)、InsertUserInfo()----"增"

下方就是插入数据的具体代码,第一个框就是我们要执行的SQL语句,然后使用mysql操作句柄调用query()方法进行SQL语句的执行。执行成功后,查询插入的数据并返回查询的结果,如下所示。

  

(2)、deleteUserInfo()----"删"

接下来我们来看一下删除的具体操作,下方截图就是deleteUserInfo()的具体实现。下方的方法与插入差不多,先给出delete的SQL语句,然后再调用mysql操作句柄的query()操作,具体代码如下所示:

  

(3)、updateUserInfo----更新用户信息

下方是更新用户信息的代码,与上两个代码差不多,只不过是通过mysql操作句柄调用query()方法执行的是update的SQL语句。更新时我们使用了MySQL的now()函数来更新时间,具体代码如下所示。

  

(4)、queryUserInfo----查询

接着我们来实现一下查询用户信息的代码。下方就是查询用户信息的代码,查询的代码稍微复杂一些,在执行完查询的SQL语句后,还需要价格查询结果进行存储。在存储后,会返回查询的结果results。我们可以通过results的forEachRow()函数的尾随闭包来获取每行的数据。在取出数据后,将其转换成相应的字典,然后将存有查询结果的字典存入到responseJson中,然后将responseJson转换为json字符串返回给用户即可。具体做法如下所示。

  

四、测试用例

上面我们写完操作User表的相应的方法后接下来我们就来测试一些具体的结果。为了方便测试,我们配置4个路由专门用来对User表的增删改成进行操作。每个路由对应着上面每个方法。本部分就给出相应的测试用例。为了方便测试,我们在路由配置时,指定请求方法全是GET请求。

1、对“增”的测试

接下来我们对InsertUserInfo()的的测试,首先我们添加一个请求方式为GET的“/create”路由,然后获取用户提交的userName和password。获取完毕后,调用UserOperator对象的insertUserInfo()方法将数据插入到数据库中。当然插入后,会接着将数据查询出来返回给客户端的。

  

我们在浏览器里访问“http://127.0.0.1:8181/create?userName=Hellow&password=1234”这个地址,就会将用户Hellow,密码为1234的用户插入到数据库。当然我们故意将Hello写成了Hellow稍后进行更新。下方就是具体的操作结果:

  

2.对“改”的测试

接下来我们就要测试一下updateUserInfo()这个函数,该部分与上述的代码差不多,也是需要配置一个请求方式为GET的更新路由“/update”。然后在该路由中获取请求参数,然后调用updateUserInfo()这个函数即可。具体代码就不做过多赘述了,直接看下方的测试结果吧。通过结果不难看出,用户名被修改成正确的Hello了,而且时间也被更新了。

  

剩下的查与删,和上方的示例差不多,在此就不做过多赘述了,我们的MySQL数据库的操作就先聊到这吧。官方上还介绍了一些数据库的ORM操作,其中就有MySQL的ORM操作,可以简化一些数据操作。这一点就留给读者自己去看吧。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #508187; background-color: #ffffff }
span.s1 { }
span.s2 { color: #4d4d4d }

Swift3.0服务端开发(四) MySQL数据库的连接与操作的更多相关文章

  1. Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)

    前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架.本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在<Swift3.0服务端开发(一)>这篇 ...

  2. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  3. Swift3.0服务端开发(三) Mustache页面模板与日志记录

    本篇博客主要介绍如果在Perfect工程中引入和使用Mustache页面模板与日志记录系统.Mustache页面模板类似于PHP中的smarty模板引擎或者Java中的JSTL标签.当然Mustach ...

  4. Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交

    今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点 ...

  5. MySql 8.0服务端安装后,用navicat12连接时报2059错误_解决

    先看连接错误 连接失败:2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: .... 解决方法: 进入MySQ ...

  6. 微服务项目开发学成在线_day01_CMS服务端开发

    05-CMS需求分析-什么是CMS 什么是CMS?CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同.CMS有哪些类型? 每个公司对每个项目的C ...

  7. Day01_搭建环境&CMS服务端开发

    学成在线 第1天 讲义-项目概述 CMS接口开发 1 项目的功能构架 1.1 项目背景 受互联网+概念的催化,当今中国在线教育市场的发展可谓是百花齐放.如火如荼. 按照市场领域细分为:学前教育.K12 ...

  8. 俯瞰 Java 服务端开发

    原文首发于 github ,欢迎 star . Java 服务端开发是一个非常宽广的领域,要概括其全貌,即使是几本书也讲不完,该文将会提到许多的技术及工具,但不会深入去讲解,旨在以一个俯瞰的视角去探寻 ...

  9. oauth2.0服务端与客户端搭建

    oauth2.0服务端与客户端搭建 - 推酷 今天搭建了oauth2.0服务端与客户端.把搭建的过程记录一下.具体实现的功能是:client.ruanwenwu.cn的用户能够通过 server.ru ...

随机推荐

  1. 日志之再说Log4J

    网上关于LOG4J的使用文章太多了,写这篇文章的目的一方面是为了回顾LOG4J的用法,一方面针对配置的使用自动将日志插入数据库,自动发送邮件,还有就是自定义输入实现.后续文章会总结下从LOG4J到LO ...

  2. [Android] Volley源代码分析(五岁以下儿童)Q \\ u0026一个

    Volley源代码分析系列那里一段时间,告诉我,有许多私人留言,同时一些问题抛出.对于一些简单的问题,我们跳,这两天被连接到朋友@smali提出的问题.告诉我你不得不赞叹查看源代码时的详细程度,大家一 ...

  3. 专业MySQL数据库管理专家SQL Manager for MySQL发布5.4版本

    SQL Manager for MySQL是一款针对MySQL数据库服务器系统的管理工具.深受数据库管理员的喜欢,其富有艺术感的图形用户界面,即使新手也可以不会为如何使用而感到困扰.近日EMSSoft ...

  4. SVG 学习(一)

    SVG 意为可缩放矢量图形(Scalable Vector Graphics). SVG 使用 XML 格式定义图像. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Gr ...

  5. 同TTX更可爱的层次分析法游戏破解

    最近的工作太忙,没啥时间写文章,今天遇到一点点的游戏,浅析.以中午的优势写这篇文章. 移动MM的游戏.前面我们已经写过非常多文章,没有看过的朋友,自行查找就可以,今天我们继续分析一个类似的游戏,只是使 ...

  6. dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured

    dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured start: ...

  7. 【AngularJS】 2.0 版本发布

    [AngularJS] 2.0 版本发布 w5cValidator[AngularJS] 2.0 版本发布   w5cValidator 插件基于angular原有的表单验证,在原有的基础上扩展了一些 ...

  8. DIP And DI

    依赖倒置(DIP)与依赖注入(DI)   依赖倒置原则(Dependency Inversion Principle)为我们提供了降低模块间耦合度的一种思路,依赖注入(Dependency Injec ...

  9. ASP.NET Web API的HttpController是如何被激活的?

    ASP.NET Web API的HttpController是如何被激活的? HttpController与HttpControllerDescriptor 程序集的解析 HttpController ...

  10. Indenting source code

    Artistic Style 1.15.3 A Free , Fast and Small Automatic Formatterfor C , C++ , C# , Java Source Code ...