Ruby on Rails 入门之:(24) Ruby 中数据持久化、数据库操作
来源:互联网 发布:淘宝上买精密管犯法吗 编辑:程序博客网 时间:2024/04/29 11:16
1. 数据库操作概述
Ruby中的数据库接口成为DBI(Database Interface),它是对底层的数据库驱动进行的抽象,形成的不同数据库之间的统一的接口。
2. 数据库操作的基本链接
在操作mysql数据库的时候需要引用外部文件“mysql”,在程序的开始部分添加:
require ""mysql;
下面给出一个基本的链接查询程序:
#encoding:utf-8require "mysql"dbh = Mysql.real_connect("localhost","root","","infosys",3306);sql = "select * from students"res = dbh.query(sql);while row=res.fetch_rowputs row[0].to_s;puts row[1].to_s;puts row[2].to_s;puts row[3].to_s;end
几乎所有的数据库链接查询都是这样操作,主机名,用户名,密码,数据库,端口,然后是查询语句,最后在查询结果集里遍历查询结果。
上面的输出结果为:
watkins@watkins:~/temp/workspace/ruby$ ruby db.rb1weisongmale1881*******watkins@watkins:~/temp/workspace/ruby$
3. 使用MySQL模块查询结果集
在使用query方法执行完查询语句以后,如果该SQL 语句有返回值,那么返回的是一个Mysql::Result类的实例。
可以使用fetch_row来取得结果集中的一行。
#encoding:utf-8require "mysql"dbh = Mysql.real_connect("localhost","root","","infosys",3306);sql = "select * from students"res = dbh.query(sql);while row=res.fetch_rowputs row[0].to_s;puts row[1].to_s;puts row[2].to_s;puts row[3].to_s;end
也可以直接使用结果集自身的迭代来进行遍历结果集中的数据:
#encoding:utf-8require "mysql"dbh = Mysql.real_connect("localhost","root","","infosys",3306);sql = "select * from students"res = dbh.query(sql);#while row=res.fetch_row#puts row[0].to_s;#puts row[1].to_s;#puts row[2].to_s;#puts row[3].to_s;#endputs "***********************************";res.each do |row|puts "#{row[0]} \t #{row[1]} \t #{row[2]}";end
4. 向数据写入特殊字符
在应用程序中,难免有时候会向数据库中写入特殊字符,例如 单引号,双引号,分号等等,向数据库中保存这些符号需要使用escape_string方法来处理这些特殊字符。
#encoding:utf-8require "mysql"dbh = Mysql.real_connect("localhost","root","","infosys",3306);#sql = "select * from students"msg = "this is a legal text 4\"3' ";puts msg;msg = dbh.escape_string("this is a legal text 4\"3'' ");sql = "insert into students values(3,'ccc','male','156896532','#{msg}')";res = dbh.query(sql);puts dbh.affected_rows;dbh.close;#while row=res.fetch_row#puts row[0].to_s;#puts row[1].to_s;#puts row[2].to_s;#puts row[3].to_s;#end#puts "***********************************";#res.each do |row|#puts "#{row[0]} \t #{row[1]} \t #{row[2]}";#end
5. 查询结果集元数据
可以使用num_rows方法 , num_fields方法获取查询结果集中的行数,列数。
还可以使用fetch_field获取字符,获得这个字段的各种属性。
#encoding:utf-8require "mysql"dbh = Mysql.real_connect("localhost","root","","infosys",3306);sql = "select * from students"#msg = "this is a legal text 4\"3' ";#puts msg;#msg = dbh.escape_string("this is a legal text 4\"3'' ");#sql = "insert into students values(3,'ccc','male','156896532','#{msg}')";res = dbh.query(sql);puts dbh.affected_rows;dbh.close;#while row=res.fetch_row#puts row[0].to_s;#puts row[1].to_s;#puts row[2].to_s;#puts row[3].to_s;#end#puts "***********************************";#res.each do |row|#puts "#{row[0]} \t #{row[1]} \t #{row[2]}";#endputs res.num_rows;puts res.num_fields;while field=res.fetch_fieldputs field.name;puts field.table;puts field.type;puts field.length;end
上面程序的输出:
watkins@watkins:~/temp/workspace/ruby$ ruby db.rb335idstudents311namestudents25345sexstudents25345phonenumberstudents25345addressstudents25345watkins@watkins:~/temp/workspace/ruby$
- Ruby on Rails 入门之:(24) Ruby 中数据持久化、数据库操作
- Ruby on Rails 入门之:(5) Ruby中基本数据类型
- Ruby on Rails 入门之:(8) Ruby中条件语句
- Ruby on Rails数据库操作
- ruby on rails 入门
- ruby on rails 入门
- ruby on rails操作mysql数据库
- Ruby on Rails 入门之:(16) Ruby中的定义操作、取消定义操作
- Ruby on Rails 入门之:(23) Ruby 中文件,目录的操作
- Ruby on Rails 入门之:(10) Ruby中的对象
- Ruby on Rails 入门之:(11) Ruby中的类方法
- Ruby on Rails 入门之:(14) Ruby中的继承
- Ruby on Rails 入门之:(17) 初次接触ruby线程
- Ruby on Rails 入门之:(19) ruby线程同步控制
- Ruby on Rails 入门之:(19) ruby线程同步控制
- ruby on rails中创建xml数据
- Ruby on Rails 入门之:(6) Ruby中常用运算符
- Ruby on Rails 入门之:(7) Ruby中表达式、循环、遍历
- CFE常用引导命令
- 让IOS应用从容地崩溃
- 红颜若惜的伤感爱情日志:有多少幸福,有多少甜蜜
- Node.js零起点开发(六)-处理POST请求
- 项目管理类似恋爱中感
- Ruby on Rails 入门之:(24) Ruby 中数据持久化、数据库操作
- SharedPreferences跨应用读取数据问题
- JAVA虚拟机加载类的方式解析
- 定时刷新网页上的数据
- 随机游走的期望距离
- 解密字符 I MISS YOU C++
- 队列中取最大值操作问题
- springside3概述
- SQLServer查询本周 本月记录