- 浏览: 682816 次
- 性别:
- 来自: 中山
文章分类
最新评论
-
wuhuizhong:
jFinal支持Rest风格吗?可以想spring mvc那样 ...
在JFinal的Controller中接收json数据 -
wuhuizhong:
在jfinal中应如何获取前端ajax提交的Json数据?ht ...
在JFinal的Controller中接收json数据 -
wuhuizhong:
jfinal如何处理json请求的数据:问题: 在某些api接 ...
在JFinal的Controller中接收json数据 -
wuhuizhong:
Ubuntu14.04 安装 Oracle 11g R2 Ex ...
Oracle 11g release 2 XE on Ubuntu 14.04 -
alanljj:
这个很实用,已成功更新,谢过了!
odoo薪酬管理模块l10n_cn_hr_payroll
1. DDL SQL:创建新表
#createStatesTable.rb require 'dbi' #数据库连接字符串:包括 DBI:OCI8:ORCL 字符串以及用户名和口令 #OCI8 部分指的是 Ruby/OCI8 驱动程序,ORCL 部分指的是数据库服务。 dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') dbh.do("CREATE TABLE states ( id CHAR(2) PRIMARY KEY, name VARCHAR2(15) NOT NULL, capital VARCHAR2(25) NOT NULL)") dbh.disconnect
2. DML SQL
2.1. INSERT
#populateStatesTable.rb require 'dbi' dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') #注意问号在 INSERT 语句中用作占位符。 sqlInsert = "INSERT INTO states (id, name, capital) VALUES (?, ?, ?)" dbh.do(sqlInsert, "AL", "Alabama", "Birmingham") dbh.do(sqlInsert, "AZ", "Arizona", "Phoenix") dbh.do(sqlInsert, "CO", "Colorado", "Denver") dbh.do(sqlInsert, "FL", "Florida", "Tallahassee") dbh.do(sqlInsert, "MA", "Maine", "Augusta") dbh.do(sqlInsert, "PA", "Pennsylvania", "Philadelphia") dbh.do(sqlInsert, "UT", "Utah", "Salt Lake City") dbh.do(sqlInsert, "WA", "Washington", "Seattle") dbh.do(sqlInsert, "WY", "Wyoming", "Cheyenne") dbh.commit dbh.disconnect
2.2.UPDATE
#updateStatesTable.rb require 'dbi' dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') #用占位符 sqlCapitalsUpdate = "UPDATE states SET capital = ? WHERE id = ?" dbh.do(sqlCapitalsUpdate, "Montgomery", "AL") dbh.do(sqlCapitalsUpdate, "Harrisburg", "PA") dbh.do(sqlCapitalsUpdate, "Olympia", "WA") #不使用任何占位符 dbh.do("UPDATE states SET id = 'ME' WHERE name = 'Maine'") dbh.commit dbh.disconnect
2.3.DELETE
DELETE执行方式与其同等的 DML 语句 INSERT 和 UPDATE 的执行方式类似。
2.4.SELECT
#queryStatesTable.rb require 'dbi' dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') #数据库查询的结果集。 rs = dbh.prepare('SELECT * FROM states') rs.execute while rsRow = rs.fetch do #内置的 p 函数打印出返回的行 p rsRow #Alternative output: puts rsRow #Alternative output: pp rsRow end rs.finish dbh.disconnect
2.5.使用 DBI 以表格输出查询结果
清单 5 queryStatesTableFormatter.rb require 'dbi' dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') rs = dbh.execute('SELECT * FROM states') rows = rs.fetch_all column_names = rs.column_names rs.finish DBI::Utils::TableFormatter.ascii(column_names, rows) dbh.disconnect
2.6.使用 DBI 以XML 格式输出查询结果
# queryStatesTableXML.rb require 'dbi' dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') rs = dbh.execute('SELECT * FROM states') states_rows = rs.fetch_all rs.finish DBI::Utils::XMLFormatter.table(states_rows) dbh.disconnect
3. 存储过程。
3.1.访问 PL/SQL 内置存储过程 DBMS_UTILITY.DB_VERSION(接受两个 OUT 参数)
#builtInDBVersionCompat.rb require 'dbi' #使用位置绑定变量,将问号 (?) 放在数据库执行字符串中. db_read_str = 'BEGIN DBMS_UTILITY.DB_VERSION(?, ?); END;' dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') #使用DBI::Handle(sth_db)函数方法 sth_db = dbh.prepare(db_read_str) #使用从1开始的连续整数来引用值。 sth_db.bind_param(1, ' ' * 50) # allow for up to 50 chars sth_db.bind_param(2, ' ' * 50) # allow for up to 50 chars sth_db.execute #Ruby符号(:bind_value)的使用 version = sth_db.func(:bind_value, 1) puts "Oracle DB Version: " + version compatibility = sth_db.func(:bind_value, 2) puts "Oracle DB Compatibility: " + compatibility dbh.disconnect
3.2.运行内置的存储函数 DBMS_METADATA.GET_DDL返回创建表所需的 DDL。
#builtInGetDDL.rb require 'dbi' #使用名称绑定变量,放入的是 Ruby 符号(:out1、:in1 和 :in2) db_read_str = 'BEGIN :out1 := DBMS_METADATA.GET_DDL(object_type=>:in1, ' db_read_str += 'name=>:in2); END;' puts db_read_str dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') sth_db = dbh.prepare(db_read_str) #通过名称引用绑定变量以访问其值。 sth_db.bind_param("out1", ' ' * 20000 ) sth_db.bind_param("in1", "TABLE") sth_db.bind_param("in2", "STATES") sth_db.execute puts sth_db.func("bind_value", "out1") dbh.disconnect
4.访问安裝Oracle的操作系统
4.1.访问环境变量
#displayOracleENV.rb #使用每种方法对 ENV 散列进行迭代,每行打印一个环境变量及其值。 ENV.each {|key ,value| print key, "=", value, "\n"}
4.2.访问各种配置和其他文件(如 init.ora 文件)
4.2.1.查看init.ora文件中的键值设置.
#displayInitOra.rb =begin 檔案从命令行和基于控制台的用户提示符获得输入。 首先在命令行使用预定义的 Ruby 变量ARGV,尝试获取文件路径和文件名。 如果不奏效,然后提示用户输入路径。 如果用户不提供路径和文件名,则使用硬编码的路径(包括文件名)。 =end fileName = ARGV.to_s # example of if statement if fileName.size < 1 print "Enter init.ora path and name: " #删除从用户控制台输入中检索到的基于字符串的文件名末尾的记录分隔符。 #惊叹号表明该方法正在执行有可能对对象危险的操作。 fileName = gets.chomp! end #example of unless statement unless fileName.size > 1 fileName = "C:\\oracle\\product\\10.1.0\\admin\\orcl\\init.ora" end print "File Name: " + fileName + "!" theFile = File.new(fileName, "r") # read the file text = theFile.read # copy file's contents into string theFile.close # string holds file contents; close file #使用Regexp处理正则表达式,应用于字符串的scan方法,返回与所提供的正则表达式匹配的字符串中的子字符串。 regExp = Regexp.new('^.+=.+$') puts text.scan(regExp)
4.2.2.比较两个 init.ora 文件并报告它们之间的差异。
#diffInitOra.rb =begin 读入作为命令行参数传入的两个 init.ora 文件的内容。 使用pp库打印出文件的名称,如果其中一个文件未打开,则显示该文件关闭。 在从文件中读取的两个字符串之间用一个减号确定两个文件之间的差异。 =end require 'pp' unless ARGV.size == 2 print "Usage: ruby arrayMagic.rb firstFile secondFile" exit end firstFile = File.new(ARGV[0], "r") secondFile = File.new(ARGV[1], "r") regExp = Regexp.new('^.+=.+$') text1 = firstFile.read.scan(regExp) text2 = secondFile.read.scan(regExp) firstFile.close pp firstFile puts text1-text2, "\n" pp secondFile puts text2-text1 secondFile.close
5.Ruby 异常处理
5.1.使用 Ruby 的异常处理机制的示例。
#rubyExceptions.rb =begin 关键字begin引发(抛出)异常的代码块的起始位置。 关键字raise供脚本引发(抛出)自己的异常。 关键字rescue与Java的catch关键字类似。 关键字ensure与Java的finally关键字类似,用于执行功能,无论是否遇到异常。 =end fileName = ARGV.to_s #obtain file name if not provided on command-line if fileName.size < 1 print "Enter init.ora path and name: " fileName = gets.chomp! end #ensure something has been provided for file name begin if fileName.size < 1 raise ArgumentError, "No valid file name provided" + "\n" end rescue ArgumentError => argErr print argErr raise # re-raise this exception and force script termination end #get file contents begin #Begin exception handling block for file I/O theFile = File.new(fileName, "r") text = theFile.read theFile.close rescue IOError print "I/O Error: Problem accessing file " + fileName + "\n" exit rescue Errno::ENOENT print "ENOENT: Cannot find file " + fileName + "\n" exit rescue Errno::EPERM print "EPERM: Insufficient rights to open " + fileName + "\n" raise rescue Exception # Catch-all: More exceptions captured than with "rescue" alone print "Generic error rescued (captured) during file I/O attempt." + "\n" raise else print "Good news! There was no problem with file I/O for " + fileName + "\n" ensure print "Good or bad, file handling attempt is now complete!\n" end #End exception handling block for file I/O #obtain text string for regular expression print "Enter regular expression pattern: " pattern = gets.chomp! begin #Begin exception handling block for regular expression regExp = Regexp.new(pattern) rescue RegexpError print "Problem with regular expression " + regExp.to_s + "\n" exit # Nothing to be done with a bad regular expression ensure print "Regular expression evaluated was: " + regExp.to_s + "\n" end #End exception handling block for regular expression puts text.scan(regExp)
下图显示了运行脚本三次的结果。
第一次运行该脚本时,故意提供了一个未知的文件名以调用文件处理异常处理。
第二次运行该脚本时用正确的文件名演示 else 块的执行,并允许执行转至与正则表达式处理相关的代码块。第二次执行该脚本时,提供了一个错误的表达式以演示 RegexpError 的处理。
第三次运行该脚本时演示了脚本的完整运行,不引发异常。所有这三次运行都演示了 ensure 块的执行,因为无论是否引发(抛出)异常,所有异常处理过程中始终调用该块。
5.2.Ruby DBI 异常处理
=begin rubyDbExceptions.rb 代码将导致抛出一个异常,因为存在一个“while 0”循环(0 的值为“true”),该循环将重复执行,直至抛出异常。由于在抛出DBI::DatabaseError之前重复调用DBI.connect 而没有正确关闭打开的连接,因此的确会抛出该异常。在这种情况下,显示的错误代码为 12520(特定于 Oracle 的数据库错误代码),错误字符串为“ORA-12520:TNS:listener could not find available handler for requested type of server.”这些输出代码和字符串值是使用适当的 DBI::DatabaseError 属性(err 和 errstr)输出的。 如果用一个数据库操作(如 SELECT 语句)替换while 循环(故意强制数据库错误),rescue、else 和 ensure 块将被激活。如果仍出现任何异常(如完整性约束),将调用适当的“rescue”块。如果没有遇到指定了 rescue 块的异常,“else”块中的代码将执行并提交事务。在任何情况下,无论是否抛出异常,都将执行“ensure”代码块,并相应地断开与处理程序的连接。 编写 Ruby 脚本时,不一定需要捕获 (rescue) 异常(考虑 Java 的非强制异常)。然而,如果您知道可能出现某些异常并希望您的脚本针对这些情况进行某些处理(如立即退出或者打印出某些与异常相关的详细信息),Ruby 可以简化异常处理。如果您不想将 rescue-else-ensure 块与抛出异常的代码块相关联,该脚本将突然停止该代码块的执行,将显示常规异常信息,执行下一个代码块。 =end require 'dbi' begin counter = 0 while 0 # "infinite" loop because 0 resolves to "true" for Ruby conditional dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr') counter += 1 puts "DB Connection #" + counter.to_s + "\n" #Intentionally NOT closing with dbh.close to force DatabaseError. end rescue DBI::DataError => dataErr dbh.rollback puts "DB error due to problem with data" puts "Error Code: #{dataErr.err}" puts "Error Message: #{dataErr.errstr}" puts "DB rollback.\n" rescue DBI::IntegrityError => integErr # Example: Trying to insert same value for unique column twice. dbh.rollback puts "DB error due to integrity problem." puts "Error Code: #{integErr.err}" puts "Error Message: #{integErr.errstr}" puts "DB rollback.\n" rescue DBI::InternalError => internErr dbh.rollback puts "DB error database internal error." puts "Error Code: #{internErr.err}" puts "Error Message: #{internErr.errstr}" puts "DB rollback.\n" rescue DBI::NotSupportedError => notSuppErr dbh.rollback puts "DB feature not supported." puts "Error Code: #{notSuppErr.err}" puts "Error Message: #{notSuppErr.errstr}" puts "DB rollback.\n" rescue DBI::OperationalError => opErr dbh.rollback puts "DB error due to problems with operation of database." puts "Error Code: #{opErr.err}" puts "Error Message: #{opErr.errstr}" puts "DB rollback.\n" rescue DBI::ProgrammingError => dbProgErr # Example: Bad column name in SQL statement. dbh.rollback puts "DB error due to programming problem.\n" puts "Error Code: #{dbProgErr.err}" puts "Error Message: #{dbProgErr.errstr}" puts "DB rollback.\n" rescue DBI::DatabaseError => dbErr # Catch-all for all database exceptions. dbh.rollback puts "Database exception encountered." puts "Error Code: #{dbErr.err}" puts "Error Message: #{dbErr.errstr}" puts "DB rollback." rescue DBI::InterfaceError => ifError dbh.rollback puts "Problem with DBI interface encountered." rescue RuntimeError dbh.rollback puts "Unknown error (not DB or DBI) encountered." else puts "DB commit.\n" dbh.commit ensure puts "Disconnecting database handler." dbh.disconnect end
发表评论
-
使用Torquebox在Windows下面进行Rails的部署
2013-12-16 07:16 1080一、安装Torquebox 参考:http://torqu ... -
ruby匹配中文的正则表达
2013-07-16 21:12 1903ruby1.9: /\p{Word}+/u 不限于 a ... -
Ruby On Rails, Thin and Nginx on Windows
2012-01-08 07:23 1818安装thin: gem install eventmachi ... -
搭建rubygem repository server
2011-11-14 13:06 1012做rails开发通常需要gem i ... -
在 Heroku 安裝 Redmine (1.1-stable)
2011-11-13 09:59 1056Redmine 是一套好用的軟 ... -
Rails之记录用户操作数据库信息
2011-11-10 02:50 1168db/migrate/002_add_audit_trails ... -
Rails3部署到heroku
2011-11-10 02:47 692gem install heroku rails new m ... -
Rails Cache
2011-11-10 02:20 681Rails Cache http://www.slid ... -
How do I use ActiveSupport core extensions?
2011-11-07 17:04 477When I try to use 1.week.ago ... -
Redhat安裝 nokogiri 時要求升級 libxml2
2011-11-07 16:58 2248安裝 nokogiri 時出現以下錯誤信息: Install ... -
Compass Agile Enterprise Framework
2011-11-07 06:37 714设置: 1.Gemfile gem 'erp_agreem ... -
Linux下Rails 3.1安装sqlite3
2011-10-25 08:29 1138服务器系统是Red Hat 4.1.2-48。默认已安装sql ... -
Ubuntu Server 64bits 如何安装 ruby-oci8
2011-10-23 06:56 3019安装 Linux软件包 : sudo apt- ... -
将gem包打成jar包
2011-10-16 11:45 816http://www.intellij.org.cn/blog ... -
升級到 Rails 3.1,專案所要做的前置準備工作
2011-10-14 14:28 632http://wp.xdite.net/?p=3137 ... -
Ruby 调用Shell脚本
2011-10-13 15:13 2888// 第一种 用反引号将shell命令引起来,如果是sh ... -
Ruby通过SOAP调用webservice发送短信
2011-10-06 11:27 1598url = 'http://lxt.esms360.co ... -
Sending delayed email from devise
2011-09-27 14:39 646Alternatively, instead of using ... -
让邮件发送也变得有序
2011-09-27 14:10 581邮件发送应该是一个网站中不可或缺的功能,但如果同时触发了大量的 ... -
rails 3 中 生成pdf 2: email pdf 附件
2011-09-27 13:31 983ActionMailer in Rails 3 http:/ ...
相关推荐
建筑工地扬尘治理与文明施工检查表.docx
基于java的个性化旅游攻略定制系统设计与实现.docx
数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 导弹追击模型的建立与求解 共6页.pdf
基础课程辅助教学-JAVA-基于springBoot程序设计基础课程辅助教学系统设计与实现
适用人群:大学生 自学者 使用场景:大学生毕设 自学者练手项目 学习与交流 其它说明:部分资源来源网络及开源社区、仅供参考与学习、不可商用、若有侵权请联系删除! 内容概要:用springmvc实现的校园选课管理系统
java课程期末考试
C++ Vigenère 密码(解密代码)
工程研究中心申报基本情况一览表.docx
Vigenère 密码(加密代码)
密码学AES算法源代码,密码学实验
基于java的百货中心供应链管理系统设计与实现.docx
环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目均可完美运行
【资源说明】 大数据毕业设计 基于Python+Spark机器学习天气预测系统详细文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
购物系统 微信小程序+PHP毕业设计 源码+数据库+论文+启动教程
BIM 人才培养的框架和方法 相关的标准
源项目文件
ActiveMQ消息中间件的测试案例
内容概要:本文全面解析了汽车电动化、智能化背景下,车规芯片SoC的重要性和发展趋势。首先概述了汽车行业发展三大趋势——新能源车市场崛起、智能化引领新潮流、商业模式及价值链重构。随后详细介绍了车规芯片SoC的应用领域,包括主控芯片、功率芯片、CMOS芯片、射频接收器、传感器、存储芯片及汽车面板,并阐述了它们的作用和技术需求。文章接着讨论了电子电气架构的演进路径,从分布式向集中式的演进对汽车芯片供应链带来的影响。最后探讨了汽车SoC的技术特征、应用领域、未来发展方向及其面临的挑战。 适合人群:汽车芯片设计师、汽车制造商、科研机构及相关行业的专业人士。 使用场景及目标:理解和掌握汽车芯片尤其是SoC在智能电动汽车中的应用及未来发展,帮助相关从业者做出更好的技术和商业决策。 其他说明:随着智能电动汽车市场的快速成长,车规芯片SoC作为核心技术将面临前所未有的机遇和挑战。
用于控制 Broadlink RM2/3 (Pro) 遥控器、A1 传感器平台和 SP2/3 智能插头的 Python 模块python-broadlink用于本地控制 Broadlink 设备的 Python 模块和 CLI。支持以下设备通用遥控器RM home、RM mini 3、RM plus、RM pro、RM pro+、RM4 mini、RM4 pro、RM4C mini、RM4S、RM4 TV mate智能插头SP mini、SP mini 3、SP mini+、SP1、SP2、SP2-BR、SP2-CL、SP2-IN、SP2-UK、SP3、SP3-EU、SP3S-EU、SP3S-US、SP4L-AU、SP4L-EU、SP4L-UK、SP4M、SP4M-US、Ankuoo NEO、Ankuoo NEO PRO、Efergy Ego、BG AHC/U-01开关MCB1、SC1、SCB1E、SCB2出口BG 800, BG 900电源板MP1-1K3S2U、MP1-1K4S、MP2环境传感器A1报警套件S1C、S2KIT灯泡LB1、LB26 R1、LB2
这是一份关于五个城市的PM2.5监测数据文件,以CSV格式存储。数据涵盖了广州、北京、沈阳等地的空气质量情况,旨在帮助研究人员和数据分析人员更好地理解城市空气污染状况。 使用人群 适合对环境科学、大气污染研究感兴趣的科研工作者、学生及环保组织成员使用。 数据内容 包含五个主要城市的PM2.5浓度数据 时间跨度较长,覆盖多年数据 CSV格式方便导入各种数据分析软件进行进一步处理和分析