在ruby中使用sequel jdbc连接到microsoft sql server 2012 - 遇到错误com.microsoft.sqlserver.jdbc.SQLServerDriver not returned

问题描述 投票:0回答:4

我正在尝试使用续集 gem 连接到 ruby 中的 Microsoft SQL Server 2012 数据库。

这就是我所拥有的

require "sequel:
require "activerecord-jdbcmssql-adapter"

@db = Sequel.connect("jdbc:sqlserver://<host>;database=<dbname>;user='<userid>';password='pwd'")

当我运行此命令时,我收到错误:

com.microsoft.sqlserver.jdbc.SQLServerDriver not loaded.

如何加载驱动程序?

谢谢!

ruby sql-server jdbc sequel
4个回答
3
投票

在调用

Sequel.connect
之前,您需要手动获取驱动程序jar文件:
require 'path/to/sqljdbc4.jar'
。 对于所有没有相应的
jdbc-*
gem 包裹 jar 的 Sequel jdbc 子适配器来说都是如此。


2
投票

您将sequel与activerecord适配器结合起来。

Sequel 有自己的 JDBC 适配器文档提到:

在 JRuby 上运行时提供 Sequel 的 JDBC 支持。

您在使用 JRuby 吗?


将 MSSQL-DB 与后续连接有不同的可能性。在您的评论中,您回答说您不需要 JDBC。

我的首选版本是使用tinytds(除了sequel之外,你还必须安装gem。)

我的代码摘录:

    db = Sequel.tinytds(
      :host     =>  connectiondata[:server], 
      :database=> connectiondata[:database],      
      :user       => connectiondata[:username],  #No SSO possible
      :password=> connectiondata[:password],
    )      
    db.test_connection  #force exception if problem occured

另一种选择是 ADO,但我过去在使用 ADO 时遇到过问题。

  db = Sequel.connect(
    :adapter=>'ado', 
    :host     =>connectiondata[:server], 
    :database=>connectiondata[:database], 
    #~ :user       => connectiondata[:username],  #not needed via SSO
    #~ :password=>connectiondata[:password],    #not needed via SSO
    #:encoding =>Encoding::UTF_8,  #only MySQL
  )
  db.test_connection  #force exception if problem occured

0
投票

我遇到了同样的问题,发现只需下载 jdbcsql 驱动程序并将其复制到 jruby/lib/ 目录即可解决该问题(我在开发和生产计算机上使用带有 jruby 的 Rails 4.1)。

1) 确保您在 gemfile 中使用正确的适配器。

gem 'activerecord-jdbc-adapter' 

2) 从 Microsoft 下载 sqljdbc_4.x 驱动程序。解压并复制到开发机和生产服务器上的 ../jruby/lib/ 目录。

3) 在您的database.yaml 文件中使用以下内容:

production:
  host:      <your.server.address>
  adapter:   jdbc
  username:  <your_username>
  password:  <your_password>
  database:  YourDatabaseName
  driver:    com.microsoft.sqlserver.jdbc.SQLServerDriver
  url:       jdbc:sqlserver://<your.sever.address>;databaseName=<YourDatabaseName>
  pool:      5
  timeout:   5000

我将此设置与 Mac OS X (10.10) 开发计算机和 Windows 2012 Server 生产服务器一起使用。

这也避免了必须安装tiny_tds,这在jruby下构建可能很麻烦。


0
投票
require './mssql-jdbc-8.2.2.jre8.jar'
require 'sequel'

DB = Sequel.connect(
    :adapter => "jdbc",
        :url => "jdbc:sqlserver://127.0.0.1;user=theuser;password=thepasswd"
    )

DB['select @@version;'].each do |row|
  p row
end
© www.soinside.com 2019 - 2024. All rights reserved.