第十课--microWRT 应用开始之数据库

来自Microduino Wikipedia
Shengkai81@gmail.com讨论 | 贡献2015年5月17日 (日) 12:56的版本 SQLite 数据库介绍
跳转至: 导航搜索

上一节教程中我们介绍了如何在microWRT上搭建服务器,那仅仅是个框架,任何服务器都离不开数据库的支持。我们耳熟能详的数据库就是MySQL,但是它的个头比较大。 对于小型的嵌入式设备有时候不是很合适。所以在一些小型设备上,经常会用到一些轻量级的关系数据库。本节教程就来介绍一款常见的数据库Sqlite,为了满足其他一些 更高级的需要,本教程也简单介绍了MySql数据在microWRT的使用。


SQLite 数据库介绍

Sqlite是一款轻量级的关系型数据库,它主要是为嵌入式系统而设计的,因此它本身占用的系统资源比较少,没有进程的概念,没有严格的数据结构限制。 并且语法保持了和其他关系型数据库高度的一致性,是使用者可以很容易的上手使用。基于上述的各种特点,它非常适合用openwrt这样的嵌入式系统。

目前Sqlite3 是SQLite的最新版本,关于Sqlite的详细资料,可以参考官网。 http://www.sqlite.org

1. SQLite 的特点 1)SQLite 没有服务,它总是嵌入到各种编程语言总,不需要连接到一个数据库服务。不像MySQL,它在运行的时候需要起一个demon程序。 2)SQLite 中没有数据库的概念,虽然你可以创建一个数据库,但是它的本质就是一个文件,所有对数据的操作都是文件来实现的。 3)SQLite 采用I/O直接操作,因此它的性能非常高,但是也正是它的这特点带来一个问题,那就是访问数据的同步问题,需要通过加锁机制解决这个问题。但是SQLite他把表分离成不同的文件,这样也就间接解决了这个问题。 4)SQLite 在稳定性上也比较好,尤其是断电异常及保护机制。

2. SQLite 的安装 上面我们已经提到SQLite没有所谓的SQLite服务,在各种语言中已经包含了相关的库,直接调用就好了。基于这种原理,我们只要在microWRT上安装SQLite命令, 就可以在命令行下查看,操作数据文件。

安装SQLite命令,如果固件基于openwrt的BB版本,可以直接运行下面的命令来安装。

 root@microWrt:~# opkg update
 root@microWrt:~# opkg install sqlite3-cli

3. SQLite 的操作 创建数据库

 root@OpenWrt:~# sqlite3 /mnt/sda/test_sqlite3.db
 SQLite version 3.8.7.4 2014-12-09 01:34:36
 Enter ".help" for usage hints.
 sqlite>

创建表,包含两个column,name 和age。

 create table test(
   name varchar(60),
   age int(3)
 );

插入数据,查看数据

 sqlite> insert into test(name,age) values('Jason','30');
 sqlite> insert into test(name,age) values('Tiki','34');
 sqlite> select * from test;


4. 使用PHP操作SQLite 关于如何使用PHP语言来使用SQLite的详细介绍,可以参考 www.php.net

为了保证PHP能够使用SQLite,需要先安装一个支持包。

 root@microWrt:~# opkg install php5-mod-sqlite3

下面的程序实现了一个查询数据库的web程序。

 <?php
 //打开数据库文件,以读写形式,如果文件不存在就尝试创建
 $db = new SQLite3("/mnt/sda/test_sqlite3.db",SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);
 //设置sqlite存储编码
 $db->query('PRAGMA encoding="UTF-8"');
 //设置sqlite同步缓存方式
 $db->query('PRAGMA synchronous = NORMAL');
 //查询
 $result=@$db->query("select * from test");
 if ($db->lastErrorCode() !== 0) {
    //如果查询有错则显示错误
    echo "Error: ".$db->lastErrorMsg();
    exit;
  }
 //准备输出
 $output="";
 while ($row = $result->fetchArray(SQLITE3_ASSOC)) 
 {
 $output.="name:  ".$row['name'];
 $output.="age:  ".$row['age'];
 }
 $result->finalize(); //输出结束
 //关闭数据库
 $db->close();
 ?>
 <html>
 <head>
 <title> MicroWRT </title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 </head>
 <body style="background-color: #f3f3f3">
 <?=$output;?>  
 </body>
 </html>

运行程序后的输出为:

 name:Jason age:30
 name:Tiki  age:32

MySQL 数据库介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,已经被Oracle公司收购。MySQL是最流行的关系型数据库管理系统, 在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。

关于MySQL的详细介绍,请参考官网:http://www.mysql.com

就如本节教程开始所讲,在嵌入式系统中安装MySQL不是很合适,因为系统CPU性能不是很强。


1. MySQL安装与配置 不同于嵌入式的SQLite3,MySQL需要独立安装开启服务才能正常启动使用。

安装MySQL

 root@microWrt:~# opkg install mysql-server 

注意:一般需要把MySQL安装入U盘,所以需要用”-d 安装路径“

MySQL的库存储位置一般在/var/lib下,由于OpenWrt的var文件夹是内存临时文件目录,所以我们要重新定义这部分路径信息。 准备库文件存储位置

 root@microWrt:~# mkdir -p /mnt/sda/data /mnt/sda/data/mysql /mnt/sda/data/tmp

初始化默认的MySQL数据

 root@microWrt:~# mysql_install_db --force

2. MySQL启动 设置启动服务

 root@microWrt:~# /etc/init.d/mysql enable

手工启动一次

 root@microWrt:~# /etc/init.d/mysql start

3. 使用PHP操作MySQL 对于MySQL操作,在网上可以找到大量的例子,本文只是提供一个简单的测试例子。

安装PHP的MySQL支持

 root@OmicroWrt:~# opkg install php5-mod-mysql

一个查询数据库的WEB例子

 <?php
 //简单演示MySQL的连接是否成功
 $link = mysql_connect('127.0.0.1', 'root', );
 if (!$link) {
   die('Could not connect: ' . mysql_error());
 }
 echo 'Connected successfully';
 mysql_close($link);
 ?>