【问题标题】:Error connecting to SQL Server instance using JRuby and Microsoft JDBC Driver 4.0使用 JRuby 和 Microsoft JDBC Driver 4.0 连接到 SQL Server 实例时出错
【发布时间】:2014-02-04 14:39:06
【问题描述】:

我正在尝试使用 JRuby 1.9.3 和 MS JDBC Driver 4.0 连接到 SQL Server 2012 数据库。从 JRuby IRB 控制台我输入以下内容:

require "sqljdbc4.jar"
Java::com.microsoft.sqlserver.jdbc.SQLServerDriver
url = "jdbc:sqlserver://ipaddress;databaseName=databasename"
c = java.sql.DriverManager.get_connection(url, "username", "password")

它似乎工作正常,直到最后一行我得到一个“Java:JavaSql::SqlException:没有为 jdbc:sqlserver://ipaddress;databaseName=databasename 找到合适的驱动程序”错误。

我知道ip地址、数据库名、用户名和密码是正确的,因为我可以从同一台机器通过SQL server management studio连接而没有问题。

我错过了什么?

编辑:在带有 SQL Server 2012 的 Windows Server 2008 和带有 SQL Server 2008 Express 的 Windows 7 上进行了尝试,结果相同。

【问题讨论】:

    标签: sql-server jdbc jruby


    【解决方案1】:

    我用 JRuby 1.9.3 和 MS JDBC Driver 4.0 解决了同样的问题,并像这样解决了它:

    driver = Java::com.microsoft.sqlserver.jdbc.SQLServerDriver.new
    props = java.util.Properties.new
    props.setProperty("user", "username")
    props.setProperty("password", "password")
    url = 'jdbc:sqlserver://servername;instanceName=instance;databaseName=DbName;'
    conn = driver.connect(url, props)
    

    在页面底部找到:https://github.com/jruby/jruby/wiki/JDBC

    我的设置似乎存在动态加载驱动程序的问题,需要这种更明确的方法。

    【讨论】:

    • 我完全忘记了我问过这个问题。我离开了一段时间,当我回来时,我尝试了这个,它奏效了。令人讨厌的是,我记得最初看到它,但没有意识到它与我发现的其他示例有什么不同。
    【解决方案2】:

    听起来您没有在 JRuby 正在寻找的正确位置加载 JDBC 驱动程序。默认情况下,require 在 C:\jruby-1.7.10\lib\

    中查找

    另外,您可能需要将 jar 文件所在的文件夹添加到类路径中。

    require 'java'
    $CLASSPATH << "your/folder"
    

    我的完整测试脚本如下所示:

    $CLASSPATH << "c:/jruby-1.7.10/lib/"
    require "sqljdbc4.jar"
    
    Java::com.microsoft.sqlserver.jdbc.SQLServerDriver
    url = 'jdbc:sqlserver://127.0.0.1\\SQL2012:1433;databaseName=TestAllTheThings'
    conn = java.sql.DriverManager.get_connection(url, "sa", "sapassword")
    statement = conn.create_statement
    
    q = "SELECT * FROM Input"
    rs = statement.execute_query(q)
    
    while (rs.next) do
      puts rs.getObject('Id')
    end
    
    statement.close
    conn.close
    

    TestAllTheThings 是我的数据库名称,Input 是该数据库中的一个表,Id 是该表中的一列。

    【讨论】:

    • “require "sqljdbc4.jar"" 行运行正确意味着它可以找到驱动程序吗?如果我不这样做,那么“Java::com.microsoft.sqlserver.jdbc.SQLServerDriver”行也会失败。不幸的是,将 .jar 文件放在 lib 目录中并没有改变任何东西。
    • 很遗憾,我看不到任何效果。
    • 如果您打开命令提示符,打开 jirb,然后输入 require 'sqljdbc4.jar',会返回什么?
    • 我能够成功连接并使用更新的应答脚本查询我的 SQL Server 2012 实例。
    • 我已经尝试过了,我能想到的所有可能的连接字符串组合 + 尝试了 jTDS,结果完全相同。没有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    相关资源
    最近更新 更多