class Phoenix::Rjb
Public Class Methods
execute(sql)
click to toggle source
查询 return => Array [#<>, #<>, …] 更新(增加, 修改,删除) return 1 成功, 0 失败
# File lib/phoenix/rjb.rb, line 13 def self.execute(sql) Rails.logger.info "[SQL]: #{sql}\n" if defined? Rails h = YAML.load(File.read "#{Rails.root}/config/phoenix.yml") host = h["host"] port = h["port"] c = ::Rjb::import('phoenix.Connect') instance = c.new(host, port) if self.is_query?(sql) rs = instance.executeQuery(sql) if rs.nil? arr = [] else arr = resultset_to_obj(rs) end instance.close() return arr else i = instance.executeUpdate(sql) # p i.methods - Object.methods # p i.intValue instance.close() return i.intValue end end
get_meta_data(table_name)
click to toggle source
# File lib/phoenix/rjb.rb, line 40 def self.get_meta_data(table_name) c = ::Rjb::import('phoenix.Connect') h = YAML.load(File.read "#{Rails.root}/config/phoenix.yml") host = h["host"] port = h["port"] instance = c.new(host, port) rs = instance.getMetaData(table_name) # binding.pry # rs.java_methods arr = resultset_to_meta(rs) instance.close() $stdout.print "[MetaData:#{table_name}]: #{arr.inspect}\n" return arr end
is_query?(s)
click to toggle source
# File lib/phoenix/rjb.rb, line 5 def self.is_query?(s) s and !(s.strip =~ /^select/i).nil? end
resultset_to_meta(resultset)
click to toggle source
# File lib/phoenix/rjb.rb, line 57 def self.resultset_to_meta(resultset) columns = [] while resultset.next column_name = resultset.getString("COLUMN_NAME") column_type = resultset.getString("TYPE_NAME") columns << { column_name: column_name, column_type: column_type } end return columns end
resultset_to_obj(resultset)
click to toggle source
把 Java 中的 ResultSet对象 转化为 Ruby
中的 对象 gist.github.com/rjackson/1366047
# File lib/phoenix/rjb.rb, line 69 def self.resultset_to_obj(resultset) meta = resultset.meta_data table_name = meta.table_name(1) if table_name == "BASE_SINDEX" table_name = "BASE" end rows = [] while resultset.next row = {} (1..meta.column_count).each do |i| name = meta.column_name i row[name] = case meta.column_type(i) when -6, -5, 5, 4 # TINYINT, BIGINT, INTEGER resultset.getLong(i).to_i when 41 # Date resultset.getDate(i) when 92 # Time resultset.getTime(i).to_i when 93 # Timestamp resultset.getTimestamp(i) when 2, 3, 6 # NUMERIC, DECIMAL, FLOAT case meta.scale(i) when 0 resultset.getLong(i).to_i else BigDecimal.new(resultset.getString(i).to_s) end when 1, -15, -9, 12 # CHAR, NCHAR, NVARCHAR, VARCHAR resultset.getString(i).to_s else resultset.getString(i).to_s end end begin rows << table_name.downcase.camelize.constantize.new(row) rescue NameError raise "[Error] Missing #{table_name.downcase.camelize} Model, pls define it\n" end end rows end