[3]ruby&ruby on rails入门笔记---用Ruby访问postgresql

原创 2016年11月16日 18:51:47
在Ruby中,访问数据库可以通过DBI(database API)来访问。Ruby DBI模块为ruby程序访问数据库提供了一个与数据库无关的接口,就像perl的DBI模块一样。其具体的结构如下图,



1.The database interface (DBI): 数据库的接口层,类似于JDBC
2.The database driver (DBD) layer:实际的数据库的驱动,类似于java中实际的MySQL,Oracle的
JDBC的具体实现包。

下面以postgresql数据库为例子
1. 下载dbd-pg

2. 下载dbi

3. 代码
require'pg'
require'SecureRandom'
classPg_DB_Test
attr_reader:conn
defcreateDBConnection
if!@conn
@conn=PGconn.connect(@dbhost,5432,'','',@dbname,@dbuser,@dbpassword)
end
end
definitialize(dbhost,dbname,dbuser,dbpassword,tableName)
@dbhost=dbhost
@dbname=dbname
@dbuser=dbuser
@dbpassword=dbpassword
@tableName=tableName
@conn= createDBConnection
end
defqueryTablesEmployeeExist?
res=@conn.exec('select tablename, tableowner from pg_tables')
res.eachdo|row|
#puts row['tablename'] + ' | '+ row['tableowner']
ifrow['tablename'].match(/employee/)
return true
else
next
end
end
return false
end

defcreateTable
begin
@conn.exec("DROP TABLE IF EXISTS EMPLOYEE")
@conn.exec("CREATE TABLE EMPLOYEE (ID serial primary key,FIRST_NAME CHAR(20) NOT NULL,LAST_NAME VARCHAR,AGE INT,SEX CHAR(1),INCOME FLOAT )")
rescueDBI::DatabaseError=>e
puts"An error occurred"
puts"Error code:#{e.err}"
puts"Error message:#{e.errstr}"
end
end
definsertEmployee
if!self.queryTablesEmployeeExist?
puts"----------Created new table:employee-------"
createTable
else
puts"-----The employee table already existed!!!-----"
end
sqlStatement="INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME)VALUES ('Mac','"+SecureRandom.uuid +"', 20, 'M', 2000)"
putssqlStatement
@conn.exec(sqlStatement)
puts"Record has been created"
PG::Connection
puts@conn.class
end
defupdateEmployee
@conn.prepare'stm1',"UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = $1"
@conn.exec_prepared'stm1',['M']
end

defcloseDBConnection
@conn.closeif@conn#rescue nil
end
end
puts
dbhost="127.0.0.1"
dbname="test"
dbuser="postgres"
dbpassword="password"
tableName="student"
pgdb=Pg_DB_Test.new(dbhost,dbname,dbuser,dbpassword,tableName)
pgdb.insertEmployee
pgdb.updateEmployee
pgdb.closeDBConnection
#1 执行完后,控制台输出如下
C:\RailsInstaller\Ruby2.2.0\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) D:/ruby/learnruby/pg_db_test.rb
Testing started at 6:44 PM ...
NOTICE:  table "employee" does not exist, skipping
----------Created new table:employee-------
INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME)VALUES ('Mac','d8886789-fcbc-407b-b2bc-8e65fcdcb1d8', 20, 'M', 2000)
Record has been created
PG::Connection
Process finished with exit code 0


#2 执行完后,其数据库表的数据如下,


版权声明:本文为博主原创文章,未经博主允许不得转载。

ruby on rails3 入门 ——尝鲜吧!骚年

在win下做ror开发,无疑是件痛苦的事情,运行一个命令需要瞪大半天的时间,而且环境搭建特复杂,很是不爽!不过在mac和linux上还是很快的,这也是很多rorer不屑与win下开发的主要原因吧!不过...

ruby on rails 入门笔记

1. 环境搭建 ·      Ruby1.8.7+ (那么由于187p248,249的bug可能会导致Rails3崩溃,官方建议使用1.9.2的Ruby版本) ·      RubyGems ...

Window7—64位:Ruby on Rails - “Add 'gem sqlite3'' to your Gemfile”

解决问题的方法http://stackoverflow.com/questions/17350837/ruby-on-rails-add-gem-sqlite3-to-your-gemfile/174...

通过Ruby on Rails和docker构建微服务架构之入门教程

如何通过Ruby on Rails和docker构建微服务架构之入门教程

Ruby on Rails微信开发3——自定义菜单的创建

根据自定义菜单创建的开发者文档 创建自定义菜单,创建步骤如下: 1、获取access_token  def get_access_token response=Typhoeus.ge...
  • lissdy
  • lissdy
  • 2015年01月09日 11:46
  • 3408

Ubuntu11.10+ruby on rails 3+rspec+autotest+spork配置

step1:    创建新的项目,不包含默认测试文件(-T)     $ rails new sampleapp -T step2:     $ cd sampleapp step3:...

ruby on rails爬坑(四):使用AWS S3存取数据

一,前言在上一篇博客ruby on rails爬坑(三):图片上传及显示中提到AWS S3,这篇博客将简单介绍如何在rails项目中使用AWS S3.二,步骤 在亚马逊云服务中心开通配置AWS S3服...

关于ruby on rails测试的一些笔记

这里的rails测试主要用到了以下技术,rspec, simplecovh和factory,simplecov是用来检测测试代码对被测试代码覆盖的工具,factory_girl_rails是用来做单元...

Ruby On Rails 开发学习笔记(一)

最近在学习ROR ,写下blog记录一些问题和经验。 第一步安装curl:   Shell 代码:  sudo apt-get install curl linux curl是一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[3]ruby&ruby on rails入门笔记---用Ruby访问postgresql
举报原因:
原因补充:

(最多只允许输入30个字)