ruby中的sybase:JDBC到sybase的连接

ruby中的sybase:JDBC到sybase的连接,ruby,jdbc,jruby,sybase,Ruby,Jdbc,Jruby,Sybase,我需要从Ruby连接到一个相当旧的Sybase数据库 我最终使用了jRuby,只是因为我无法以任何方式从MRI连接到Sybase进行工作;如果有一种方法可以实际工作,并且不疯狂地为旧版本的Sybase建立Sybase连接,那就太好了。但是,我的头在墙上撞了一会儿,我想没有 因此,为了使用JDBC,我最终选择了jRuby。我有一个JDBC.jar文件可以连接到Sybase 我知道我可以在jRuby中编写原始JDBC代码,就像在Java中一样,使用JDBCAPI。但是JDBCAPI是一个很难使用的工

我需要从Ruby连接到一个相当旧的Sybase数据库

我最终使用了jRuby,只是因为我无法以任何方式从MRI连接到Sybase进行工作;如果有一种方法可以实际工作,并且不疯狂地为旧版本的Sybase建立Sybase连接,那就太好了。但是,我的头在墙上撞了一会儿,我想没有

因此,为了使用JDBC,我最终选择了jRuby。我有一个JDBC.jar文件可以连接到Sybase

我知道我可以在jRuby中编写原始JDBC代码,就像在Java中一样,使用JDBCAPI。但是JDBCAPI是一个很难使用的工具,除此之外,它在逃逸/注入保护方面非常差,或者我只是不知道如何正确使用它,至少对我来说,请参阅“难以使用”

是否有Ruby“包装器”库可以在jRuby中作为任意JDBC的包装器使用?如果我能让它与ActiveRecord一起工作,那可能很酷,但实际上并不一定需要

我一直在使用Ruby'DBI'包,它实际上工作得很好。但是Ruby DBI包似乎没有维护,对我来说使用起来越来越困难;有一堆拉取请求https://github.com/erikh/ruby-dbi/issues 与使其在第1.9.3条下工作相关,消除提交人未注意到的弃用警告等。我给github项目负责人发了一封电子邮件,询问他们是否有机会参加,然后收到了一个简单的回答“不”,没有任何解释。不太清楚发生了什么

那么,我使用jRuby JDBC或其他工具从Ruby连接到Sybase的选项是什么

根据下面的需求,我将补充我使用RHEL5作为操作系统。但是如果答案是一旦你安装了FreeTDS,你就可以这样做X、Y和Z,我可能可以自己安装FreeTDS。过去,即使在主机上安装了FreeTDS,我也会被难倒

我使用Linux上的和via访问了我们的一些MSSQL和Sybase DBMs

它不像使用MySQL或Postgres那样优雅,但是是可行的。而且,Sequel是一个非常好的非Rails数据库访问工具。它非常强大和灵活。

我在Rails 3/Sybase ASE 15项目中使用了JTDS jar和activerecord jdbc适配器gem

我唯一的问题是Sybase的限制和偏移量实际上不受支持。我最终写下我自己的访客来进行限制和抵消工作


您可能想看看这里:

这个问题似乎被放弃了,但我想记录一些成功的例子。我想首先说明这在windows和linux上是有效的

我目前正在使用jruby的MSSQL v7和MSSQL v8以及从microsoft下载的JDBC驱动程序可分发文件

问题是,JDBC 3.0和4.0驱动程序无法连接到MSSQL v7。我很幸运地发现,事实上这是一种对抗

我不确定OP对SQL注入的关注是什么,但这些驱动程序能够为分区SQL和SP创建可用于执行SQL注入的数据

关于丑陋,是的,你是对的。这就是为什么需要一些代码:

class Java::ComMicrosoftSqlserverJdbc::SQLServerResultSet
  def to_a
    #I used meta_data here to convert resultset to array of hashes 
  end
end    
要从单个select语句中获得多个结果,请执行以下操作:

yap= connection.create_statement
rowing= yap.execute sql
row_the_boat= []
while rowing
  row_the_boat<< yap.get_result_set.to_a
  rowing= yap.get_more_results
end

我把一个简单的例子放在一起,使用FreeTDS/TinyTDS/Sequel和SyBase,我们有SyBase ASE 15.3

有关Dockerfile,请参阅

#<!-- language: rb -->
require 'dotenv/load'
require 'sequel'
require 'tiny_tds'
require 'awesome_print'

opts = {
  adapter: 'tinytds',
  login_timeout: 5,
  timeout: 10,
  tds_version: '50',   #42 or 50
  host:     ENV['APP_HZ_HOST'],
  port:     ENV['APP_HZ_PORT'],
  database: ENV['APP_HZ_DATABASE'],
  username: ENV['APP_HZ_USER'],
  password: ENV['APP_HZ_PASSWORD']
}
bib_id = Integer( ARGV[0] || 0 )
tag_num =  ARGV[1] || ''

sql = "SELECT  * FROM [bib] WHERE bib#=? AND tag=?"
DB = Sequel.connect opts
dataset = DB[sql, bib_id, tag_num]
dataset.each do |row|
  ap row
end

你忘了一条极其重要的信息。你用的是什么操作系统?你能在核磁共振成像下工作吗?您能给我指出一些代码示例或安装提示吗?我之前已经注意到,sequel文档并没有特别提到sybase受支持,尽管它们提到了MS SQL,这在旧版本中是类似的,但这让我不敢尝试。因此,您实际做了什么以及Sybase的哪个版本的示例/提示将非常有用。如果您能说出您正在使用的操作系统,这将非常有用,因为不同操作系统的安装情况差异很大。我使用了FreeTDS,如果我没记错的话,它可以作为CentOS的回购协议。不过,我倾向于经常从源代码处编译。一旦FreeTDS开始工作,TinyTDS就没有问题了。我使用RHEL,但我知道编译FreeTDS是个问题。但是我以前已经做到了,并且可以再次做到,但是如何让剩下的工作在工作的基础上进行,这是以前困扰我的问题。如果您在某处提供了这方面的说明,甚至将“get FreeTDS compiled and installed”(编译并安装免费TDS)放在外面的某个地方,并将其放到web上的某个地方,我认为这将是对sad sybase社区的一项巨大服务。您是否考虑过向activerecord jdbc adapter发送请求,以及支持sybase所需的更改,但我意识到对Sybase支持Rails的兴趣非常低。所以我放弃了。