我正在尝试使用续集 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.
如何加载驱动程序?
谢谢!
在调用
Sequel.connect
之前,您需要手动获取驱动程序jar文件:require 'path/to/sqljdbc4.jar'
。 对于所有没有相应的 jdbc-*
gem 包裹 jar 的 Sequel jdbc 子适配器来说都是如此。
您将sequel与activerecord适配器结合起来。
在 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
我遇到了同样的问题,发现只需下载 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下构建可能很麻烦。
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