- 浏览: 300971 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
masuweng:
如何给新人机会 -
masuweng:
多sql结果集按列合并新结果报表实现方案 -
Ahe:
赞
坚持长跑方能赢 -
masuweng:
好好好
程序员如何更好的了解自己所做的事情 -
小楠人:
laoguan123 写道楼主好,使用过一些excel导入导出 ...
excell导入导出
控制层请求:
模型层:
存储过程Procedure::Base连接封装:
需要添加DBI gem包
gem install dbi
DBI连接池创建模块include DbQuery相关代码:
最后一点小贴士:通过DBI可以直接创建多数据库的连接
@radius = Procedure::AuthUserStatQry.new.query_user_stat(params, sort, page)
模型层:
class Procedure::AuthUserStatQry < Procedure::Base #存储过程名称 set_procedure_name "WLAN_AUTH_USER_STAT_QRY" #存储过程参数 set_procedure_params [:netloc_gran, :startdate, :enddate, :time_gran, :hourlist, :top_n, :p_order, :p_curpage, :p_pagesize, :p_totalrecords, :p_totalpages, :cursor] def initialize(options={}) super options set_param_values({:top_n => "", :p_order => "", :p_curpage => 0, :p_pagesize => 30, :p_totalrecords => 0, :p_totalpages => 0}) self.cursor = DBI::StatementHandle end def query_user_stat(params, sort, page) set_param_values({ :netloc_gran => 0, :startdate => params[:begin_time], :enddate => params[:end_time], :time_gran => params[:time_gran], :p_pagesize => page[:page_size]}) attach_sort(sort) self.p_curpage = page[:page] self.execute end end
存储过程Procedure::Base连接封装:
require 'rubygems' require 'dbi' module Procedure end class Procedure::Base include DbQuery attr_reader :results, :column_info, :total_count def initialize(options) set_param_values options @attributes = {} end def query(options) set_param_values options execute end def attach_sort(sort) if(!sort.nil? && sort[:name]) self.p_order = "order by \"#{sort[:name]}\" #{sort[:direction]}" end end def execute1 records = [] with_db_ora do |dbh| sth_db = dbh.prepare query_str bind_params sth_db, query_options sth_db.execute sth = sth_db.func(:bind_value, ":cursor") unless sth.nil? column_info = sth.column_info results = sth.fetch_all @total_count = sth_db.func(:bind_value, ":p_totalpages") results.each do |r| records << instantiate(column_info, r) end end end records end def execute with_db_ora do |dbh| sth_db = dbh.prepare query_str bind_params sth_db, query_options ActiveRecord::Base.logger.info("Procedure[#{query_str}]") ActiveRecord::Base.logger.info("Execute procedure[#{procedure_name}]:{#{query_options.join(",")}}") sth_db.execute sth = sth_db.func(:bind_value, ":cursor") unless sth.nil? @column_info = sth.column_info @results = fetch_result sth_db, sth @total_count = sth_db.func(:bind_value, ":p_totalrecords") else @results = fetch_result sth_db, sth end end self end def set_param_values(params) params.each{|k, v| self.send((k.to_s + "=").to_sym, v) } end def param_values values = [] options = query_options self.params.each do |param| values << options[param] end values end def method_missing(m, *args, &block) @attributes[m.to_s] end def [](attr_name) @attributes[attr_name.to_s] end protected def instantiate(column, record) object = self.class.new attributes = {} column.each_index do |i| attributes[column[i].name.downcase] = record[i] end object.instance_variable_set("@attributes", attributes) object end def fetch_result(sth_db, sth) sth.fetch_all unless sth.nil? end def set_query_collection_params self.index_sys = 1 self.time_gran = 7 self.cursor = DBI::StatementHandle end def query_options options = {} self.params.each do |param| options[param] = self.send(param.to_sym) end options end def query_str param_str = "" self.params.each do |param| param_str = param_str + ":" + param.to_s + "," end "BEGIN #{procedure_name}(#{param_str[0, param_str.length - 1]});END;" end class << self def set_procedure_name(value) define_method(:procedure_name) { value } end def set_procedure_params(value) define_method(:params) { value } value.each{|param| attr_accessor param.to_sym } end end end
需要添加DBI gem包
gem install dbi
DBI连接池创建模块include DbQuery相关代码:
require 'rubygems' require 'dbi' module DbQuery def bind_params(sth_db, options) return if(sth_db.nil? || options.nil?) options.each_key { |key| sth_db.bind_param(":#{key.to_s}", options[key]) } end def with_db_ora #$CFG为全局常量,指向databases.yml相关oracle配置参数 userName = $CFG['username'] password = $CFG['password'] database = $CFG['database'] database = "DBI:OCI8:#{database}" dbh = DBI.connect(database,userName,password) begin yield dbh ensure dbh.disconnect end end end
最后一点小贴士:通过DBI可以直接创建多数据库的连接
DbStyleHashs = {"mysql"=>"DBI:Mysql","oracle"=>"DBI:OCI8"} #由dbi扩充支持其他库类 #数据库参数获取 def db_connects(style=nil,d=nil,u=nil,p=nil) @userName = u @password = p database = d @database = "#{DbStyleHashs[style]}:#{database}" @dbh = DBI.connect(@database,@userName,@password) end
发表评论
-
git仓库创建
2020-09-04 15:33 708推送现有文件夹 cd existing_folder git ... -
puma高并发
2020-08-19 09:31 475nginx突发大量502报错 top看一下,cpu的占用并不高 ... -
searchkick
2019-04-10 11:30 0# 通用查询块(条件) def general_ ... -
导入线下excell业务数据按权重匹配线上数据
2019-03-07 11:00 890业务场景:(系统间还没有接口对调,订单号暂时需要线下处理) 线 ... -
两对象同时映射一对一和一对多
2019-02-20 10:14 837class Kpi::Team < Applicat ... -
ruby一些类加载方式
2018-12-21 10:12 564require_dependency 'order/sco ... -
基于ruby的gem remotipart的异步上传文件
2018-12-21 10:11 530针对某一对象保存实例化之前,异步上传图片保存。 gem ' ... -
基于html2canvas的长图分享
2018-12-21 10:11 1156<span class="ui label ... -
rails处理上传读取excell&生成excell
2018-12-20 14:15 970gem 'spreadsheet' gem 'roo', ... -
基于ruby Mechanize的爬虫
2018-12-20 13:09 668def self.sang_carwler ... -
一些常用加密方式
2018-12-20 13:02 730sign = OpenSSL::Digest::SHA256. ... -
ruby 调用restful接口示例
2018-12-20 12:02 926链接参数中添加token def self.query_p ... -
rails错误日志记录
2018-12-19 14:41 759Rails中对日志的处理采用的是“消息-订阅”机制,各部分组件 ... -
railsAPI接收Base64文件
2018-12-18 11:05 1038tmp_dir = " ... -
ruby 调用savon接口示例
2018-12-18 10:51 1017例子一 module Api module Aob ... -
关于国际商城现货展示与购物车的费用设计
2018-11-15 18:34 442关于国际商城现货展示 ... -
基于多线程的全局变量
2018-10-31 19:50 1161def current_nation def ... -
hash最小值过滤算法
2018-10-31 09:52 1085[["数量","包装" ... -
阿里云裸机部署rails运用
2018-10-08 20:33 1384登录阿里云后首先 sudo apt-get update a ... -
打包订单单据发给货代
2018-09-11 15:43 1179pdf&excell&png # rend ...
相关推荐
在学习和使用Ruby on Rails的过程中,需要熟悉Ruby语言的语法、面向对象编程以及MVC架构设计。随着Rails的更新和迭代,它引入了许多现代Web开发的新特性,比如RESTful路由、AJAX集成和安全机制等,这些都为开发者...
Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
可能使用的数据库管理系统有MySQL、PostgreSQL、Oracle或MongoDB等,用于存储和检索数据。 3. **前端技术**:前端界面的实现可能采用了HTML5、CSS3和JavaScript,配合现代化的前端框架如React、Vue.js或Angular,以...
VirtualBox SDK 5.0.2-102096是Oracle公司为开发者提供的一套用于构建和扩展VirtualBox虚拟化平台的软件开发工具包。这个开发包允许程序员通过编程接口(API)来控制和定制VirtualBox的功能,实现虚拟机管理、自动化...
2. **类型推断**: Java 7的编译器引入了"钻石操作符"(),简化了匿名内部类和泛型实例化时的类型声明,减少了代码冗余。 3. **自动资源管理**: 使用try-with-resources语句,可以确保在程序块结束时正确关闭文件、...
6.1.2 面向过程与面向对象思想的对比 78 6.1.3 面向对象技术的背景和特点 79 6.2 类的定义与对象的创建 80 6.3 成员变量 81 6.3.1 成员变量的开发与使用 81 6.3.2 成员变量的初始值 82 6.3.3 对象引用...
它们存储和管理网页所需的数据,供服务器端语言调用。 5. **框架和库**: 为了简化开发,开发者通常会使用前端框架(如React、Vue.js、Angular)和后端框架(如Laravel、Express、Django)。这些框架提供了预定义...
这部分内容分别介绍了如何使用远程方法调用(RMI)、JGroups消息传递系统和Java消息服务(JMS)来实现Ehcache的复制缓存。 #### 二十二、关闭Ehcache(Shutting Down Ehcache) 在应用程序结束运行时,正确地关闭...
CORBA(Common Object Request Broker Architecture)是面向对象分布式计算的一种标准,它允许不同系统之间的对象互相调用方法。这份文档将引导读者了解CORBA的基本概念、工作原理以及如何在J2EE环境中集成和使用...
其主要原因在于,Oracle希望推动开发者转向使用更现代化的JavaScript运行时,如GraalVM。GraalVM不仅支持JavaScript,还支持多种其他语言,如Python、Ruby等,而且在性能方面有显著提升。 总的来说,Nashorn.jar在...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...