一个选取Ruby,mysql数据库的操作亚洲城ca88手机版官网

亚洲城ca88手机版官网 4
亚洲城ca88手机版官网

这几天一直在学习使用Ruby on
Rails(RoR),想建立一个功能全面一点的LBS(Location
Based
Service)网站。但是对于我这个RoR的初学者(仅有几天时间)来说,毕竟太复杂了。因此本文试图简化原来的设计思路,抛弃一切权限管理,仅仅对数据表中的坐标位置进行插入和更新。也就是,使用表单提交用户坐标位置信息,地图页面定时刷新获取这些信息并显示在地图上。通过这个例子,来熟悉RoR的编程,熟悉ArcGIS
Online Map。掌握Ajax在RoR中的一般用法(RJS)。

–01 mysql 数据库的操作

ubuntu14.04使用rails连接mysql数据库

rails自带的sqlite3各方面都不错,但是免费版缺少一个致命功能:加密码!虽说第三方有编译好的二进制版的加密版,但咱先不折腾鸟;直接上mysql吧.

ubuntu安装mysql非常简单,先不聊;先说一下rails如何改为mysql驱动,用以下一条命令足矣:

rails new xxx -d mysql

因为新版的rails对mysql的支持使用的gem是mysql2,所以要在Gemfile中加上gem
‘mysql2’一句;不过有了上面那条命令,rails会很聪明的自动在Gemfile中加上这句,so不用劳神鸟.

rails自然要下载安装mysql2包,不过这里会报错,提示找不到mysql的头文件,看来需要下载mysql
dev包之类的东西,可以用如下命令安装:

sudo apt-get install libmysqlclient-dev

这次rails new没问题了,接下来我们创建一个model:

rails g scaffold book name:string count:integer price:integer
remark:string

下面要创建一个新的数据库:

rake db:migrate

出错鸟,提示无法连接到mysql,mysql服务不在监听状态!好吧,我们现在开始安装mysql服务器端吧:

sudo apt-get install mysql-server

接着是mysql的客户端:

apt-get isntall mysql-client

在安装服务器端时会提示输入root密码,我这里输入的是abc,如果是纯数字的话(比如123),在rails的database.yml配置中要用’123’括起来(具体我也没有试,网上其他人的经验之谈).安装完服务器端可以用如下命令确定是否mysql后台开始监听:

sudo netstat -tap|grep mysql

如果mysql服务器安装完毕且处于监听状态的话,现在可以创建rails中的数据库啦:

rake db:create -v

rake db:migrate

linux下mysql数据库路径位置在:/var/lib/mysql

我们可以确认下建立的的mysql数据库;打开终端,输入指令:

mysql -u root -p

mysql会提示输入密码来登陆,输入我们之前设定的密码abc,成功登陆mysql;接下来可以使用show
databases;查看存在的数据库:

mysql> show databases;
+———————+
| Database |
+———————+
| information_schema |
| db_test_development |
| db_test_test |
| mysql |
| performance_schema |
+———————+
5 rows in set (0.00 sec)

使用use mysql命令选择一个当前的数据库:

mysql> use db_test_development;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

可以看一下数据库中的所有表:

mysql> show tables;
+——————————-+
| Tables_in_db_test_development |
+——————————-+
| books |
| schema_migrations |
+——————————-+
2 rows in set (0.00 sec)

最后让我们看一下books表的结构:

mysql> show columns from books;
+————+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| count | int(11) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
| remark | varchar(255) | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+————+————–+——+—–+———+—————-+
7 rows in set (0.00 sec)

rails自带的sqlite3各方面都不错,但是免费版缺少一个致命功能:加密码!虽说第三方有编译好的二进制版的加密…

关键词:Ruby,
RoR, MySQL, LBS, Ajax, RJS, ArcGIS Online Map, Dojo

    — 链接数据库

0 安装RubyOnRails

Windows环境下一键安装RubyOnRails开发环境

1)直接点击链接下载:

2)或者进入下载页面,选择要安装的版本:

3)在Windows下安装InstantRails-2.0-win,
解压到无空格的英文路径下即可,如C:\。然后双击C:\InstantRails-2.0-win\InstantRails.exe文件即可启动InstantRails。

4)因为我总是喜欢使用MySQL,因此要手动把文件C:\InstantRails-2.0-win\mysql\bin\libmySQL.dll复制到目录C:\InstantRails-2.0-win\ruby\bin\。这个应该算InstantRails安装包的一个小缺陷吧。

2)开发用到的工具软件

亚洲城ca88手机版官网 1

mysql -uroot -pmysql

1 创建Rails项目

从InstantRails进入Ruby命令行,输入清单1的命令:

亚洲城ca88手机版官网 2

图1:打开Ruby命令行

清单1:创建项目gis

 

  1. C:\InstantRails-2.0-win\rails_apps>rails -d mysql gis  
  2. cd gis  
  3. ruby script/server  

第1行创建项目,第2行切换到项目中,第3行启动gis服务。点击浏览

亚洲城ca88手机版官网 3

图2:RoR默认网站

— 不显示密码

2 创建数据库

从InstantRails进入Ruby命令行:

清单2:创建项目数据库

  1. cd gis  
  2. gis>mysql -u root –p  
  3. mysql> create database gis_dev;  
  4. mysql> create database gis_test;  
  5. mysql> create database gis;  
  6. mysql> exit;  
  7. gis>  

当提示Enter
Password:时,直接回车。编辑\rails_apps\gis\config\database.yml文件,修改数据库名:gis_development=>gis_dev,gis_production=>gis。

mysql -uroot -p

3 导入数据表(locations)

从InstantRails->Configure->Database
(via PhpMyAdmin),使用以下脚本创建gis_dev中的数据表。

清单3:创建gis_dev数据库表locations

 

  1. drop table if exists locations;  
  2. create table locations (  
  3.   id int not null auto_increment,  
  4.   user_id int not null,  
  5.   recv_time timestamp default current_timestamp not null,  
  6.   x_long decimal(12,7) null,  
  7.   y_lat decimal(12,7) null,  
  8.   z_elev decimal(12,3) null,  
  9.   velocity decimal(10,0) null,  
  10.   accel decimal(10,0) null,  
  11.   direction decimal(10,4) null,  
  12.   pitch decimal(10,4) null,  
  13.   roll decimal(10,4) null,  
  14.   battery decimal(3,0) null,  
  15.   confidence decimal(3,0) null,  
  16.   message varchar(200) null,  
  17.   primary key (id)  
  18. );  

说明:
    user_id:用户id
    recv_time:收到信息的时间,这是个数据库自动填充时间的字段
    x_long:经度deg
    y_lat:纬度deg
    z_elev:高度m
    velocity:速度m/s
    accel:加速度
    direction:方向角度
    pitch:俯仰角度
    roll:倾斜角度
    battery:电池电量0-100
    confidence:信号强度0-100,似乎用signal更好一些
    message:短消息,提供呼叫信息功能
选择数据库gis_dev,在选择SQL标签页,将上面的SQL脚本粘帖到框中,最后按右下角的【执行】按钮。如图3所示:

亚洲城ca88手机版官网 4

图3:使用PhpMyAdmin创建数据表

亚洲城ca88手机版官网 5

mysql

    — 退出数据库

    quit/exit/ctrl + d

    — sql语句最后需要有分号;结尾

    — 显示数据库版本 version

    select version();

    — 显示时间

select now();

— 查看当前使用的数据库

    select database();

    — 查看所有数据库

show databases;

    — 创建数据库

    — create database 数据库名 charset=utf8;

create database python01;

create database python01 charset=utf8;

    — 查看创建数据库的语句

    — show create database ….

  show create database python01;

    — 使用数据库

    — use 数据库的名字

    use python01;

    — 删除数据库

    — drop database 数据库名;

  drop database python01;

–02 数据表的操作

    — 查看当前数据库中所有表

  show tables;

    — 创建表

— int unsigned 无符号整形

    — auto_increment 表示自动增长

    — not null 表示不能为空

    — primary key 表示主键

    — default 默认值

    — create table 数据表名字 (字段 类型 约束[, 字段 类型 约束]);

create table yyyy(

id int unsigned not null primary key auto_increment,

name varchar(20) not null,

        age int

);

    — 查看表结构

    — desc 数据表的名字;

desc yyyy;

    — 创建 classes 表(id、name)

create table classes(

id int unsigned not null primary key auto_increment,

name varchar(20) not null

);

    — 创建 students 表(id、name、age、high (decimal)、gender
(enum)、cls_id)

    create table students(

id int unsigned not null primary key auto_increment,

name varchar(20) not null,

age int unsigned,

high decimal(5,2),

gender enum(“男”,”女”,”中性”,”保密”) default “保密”,

cls_id int

);

    — 查看表的创建语句

    — show create table 表名字;

  show create table yyyy;

    — 修改表-添加字段 mascot (吉祥物)

    — alter table 表名 add 列名 类型;

  alter table classes add jixiangwu varchar(20) default “保时捷”;

    — 修改表-修改字段:不重命名版

    — alter table 表名 modify 列名 类型及约束;

alter table classes modify jixiangwu varchar(30) default “一个理想”;

    — 修改表-修改字段:重命名版

    — alter table 表名 change 原名 新名 类型及约束;

alter table classes change jixiangwu mascot varchar(20) default “蛇”;

    — 修改表-删除字段

    — alter table 表名 drop 列名;

alter table classes drop mascot;

    — 删除表

    — drop table 表名;

    — drop database 数据库;

–03 增删改查(curd)

    — 增加

+——-+——————+——+—–+———+—————-+

| Field | Type            | Null | Key | Default | Extra          |

+——-+——————+——+—–+———+—————-+

| id    | int(10) unsigned | NO  | PRI | NULL    | auto_increment |

| name  | varchar(20)      | NO  |    | NULL    |                |

+——-+——————+——+—–+———+—————-+

        — 全列插入

        — insert [into] 表名 values(…)

        — 主键字段 可以用 0  null  default 来占位

        — 向classes表中插入 一个班级

insert into classes values(1,”laowang”);

        — 向students表插入 一个学生信息

+——–+————————————-+——+—–+———+—————-+

| Field  | Type                                | Null | Key | Default |
Extra          |

+——–+————————————-+——+—–+———+—————-+

| id    | int(10) unsigned                    | NO  | PRI | NULL    |
auto_increment |

| name  | varchar(20)                        | NO  |    | NULL    |     
          |

| age    | int(10) unsigned                    | YES  |    | NULL    | 
              |

| high  | decimal(5,2)                        | YES  |    | NULL    |   
            |

| gender | enum(‘男’,’女’,’中性’,’保密’)      | YES  |    | 保密    |   
            |

| cls_id | int(11)                            | YES  |    | NULL    | 
              |

+——–+————————————-+——+—–+———+—————-+

insert into students values(1,”班主任”,18,166.66,”女”,111);

insert into students values(0,”吴彦祖”,23,188.88,”男”,222);

insert into students values(null,”谢晨”,30,188.88,default,333);

        — 部分插入

        — insert into 表名(列1,…) values(值1,…)

        insert into students(name,gender) values(“曾老师”,1);

        — 多行插入

insert into students
values(0,”laowang”,18,166.66,1,111),(0,”laoli”,18,166.66,1,111);

    — 修改

    — update 表名 set 列1=值1,列2=值2… where 条件;

        — 全部修改

update students set high=175.00;

— 按条件修改

update students set high=177.77 where id=2;

— 按条件修改多个值

— update students set gender =””,name = “xxx” ;

update students set gender=”中性”,name = “金星” where id=5;

    — 查询基本使用

        — 查询所有列

        — select * from 表名;

        select * from students;

        —定条件查询

        select * from students where id=1;

        — 查询指定列

        — select 列1,列2,… from 表名;

        select name,gender from students;

        — 可以使用as为列或表指定别名

        — select 字段[as 别名] , 字段[as 别名] from 数据表;

        select name as “姓名”,gender as “性别” from students;

        — 字段的顺序

        select gender as “性别”,name as “姓名” from students;

    — 删除

        — 物理删除

        — delete from 表名 where 条件

      delete from students where id=6;

        — 逻辑删除

        — 用一个字段来表示 这条信息是否已经不能再使用了

        — 给students表添加一个 is_delete 字段 bit 类型

alter table students add is_delete bit default 0;

update students set is_delete=1 where id=5;

— 数据库备份与恢复(了解)

— mysqldump –uroot –p 数据库名 > python.sql;

— mysql -uroot –p 新数据库名 < python.sql;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图