Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Scala连接到SQL Server数据库时出现问题_Java_Sql Server_Scala_Jdbc - Fatal编程技术网

Java 从Scala连接到SQL Server数据库时出现问题

Java 从Scala连接到SQL Server数据库时出现问题,java,sql-server,scala,jdbc,Java,Sql Server,Scala,Jdbc,我试图从Scala代码连接到SQL Server数据库,但遇到“找不到合适的驱动程序”异常。我的Scala代码如下所示: import java.sql.{Connection, DriverManager, ResultSet} val conn = DriverManager.getConnection("jdbc:sqlserver://hostname:port/DBName?user=myusername&password=mypassword") try { va

我试图从Scala代码连接到SQL Server数据库,但遇到“找不到合适的驱动程序”异常。我的Scala代码如下所示:

import java.sql.{Connection, DriverManager, ResultSet}


val conn = DriverManager.getConnection("jdbc:sqlserver://hostname:port/DBName?user=myusername&password=mypassword")
try {
    val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val rs = statement.executeQuery("select * from SomeTableName")
    while(rs.next()) {
        println(rs.getInt("CustomerID"))
    }

}
catch {
    case e => e.printStackTrace()
}
finally {
    conn.close()
}
然后,我运行了以下命令:

scala -cp /usr/lib/jtds-1.2.5.jar dbprog.scala
我还尝试使用Microsoft
sqljdbc.jar
sqljdbc4.jar
提供的用于SQL Server的JDBCJAR

下面是我得到的stacktrace:

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://hostname:port/DBName?user=myusername&password=mypassword
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at Main$$anon$1.<init>((virtual file):8)
        at Main$.main((virtual file):4)
        at Main.main((virtual file))
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at scala.tools.nsc.ObjectRunner$$anonfun$run$1.apply(ObjectRunner.scala:75)
        at scala.tools.nsc.ObjectRunner$.withContextClassLoader(ObjectRunner.scala:49)
        at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:74)
        at scala.tools.nsc.ScriptRunner$.scala$tools$nsc$ScriptRunner$$runCompiled(ScriptRunner.scala:381)
        at scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:414)
        at scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:413)
        at scala.tools.nsc.ScriptRunner$.withCompiledScript(ScriptRunner.scala:351)
        at scala.tools.nsc.ScriptRunner$.runScript(ScriptRunner.scala:413)
        at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:168)
        at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
java.sql.SQLException:找不到适合jdbc的驱动程序:sqlserver://hostname:port/DBName?user=myusername&password=mypassword
位于java.sql.DriverManager.getConnection(DriverManager.java:602)
位于java.sql.DriverManager.getConnection(DriverManager.java:207)
在主$$anon$1。((虚拟文件):8)
在Main$.Main((虚拟文件):4)
在Main.Main((虚拟文件))
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
在scala.tools.nsc.ObjectRunner$$anonfun$run$1.apply(ObjectRunner.scala:75)
位于scala.tools.nsc.ObjectRunner$.withContextClassLoader(ObjectRunner.scala:49)
位于scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:74)
位于scala.tools.nsc.ScriptRunner$.scala$tools$nsc$ScriptRunner$$runCompiled(ScriptRunner.scala:381)
位于scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:414)
位于scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:413)
位于scala.tools.nsc.ScriptRunner$.withCompiledScript(ScriptRunner.scala:351)
位于scala.tools.nsc.ScriptRunner$.runScript(ScriptRunner.scala:413)
位于scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:168)
位于scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

我做错了什么?我如何修复它?

尝试在getConnection之前包含它(修改它以反映SQLServer驱动程序)

我在这里写了一个使用JDBC和Scala的完整示例

更换

val conn = DriverManager.getConnection("jdbc:sqlserver://hostname:port/DBName?user=myusername&password=mypassword")

乔 你需要去做

import java.sql.{Connection, DriverManager, ResultSet}

Class.forName("org.postgresql.Driver")
val conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/clients","username","password")
然后下载-jardb 如果你像我一样需要postgresql:-D wget
postgresql-9.0-801.jdbc3.jar
或者
~mysql.jar


exec:scala-cp postgresql-9.0-801.jdbc3.jar文件。scala

我发现这段代码适合我:

尝试向以下用户注册您的驱动程序:

java.sql.DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver)
而不是使用
classOf[net.sourceforge.jtds.jdbc.Driver]
Class.forName(“net.sourceforge.jtds.jdbc.Driver”)

例如:

  val uri = "jdbc:jtds:sqlserver://localhost:1433/yourdatabae"
  val username = "username"
  val password = "password"

  DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver)

  private val conn: Connection = DriverManager.getConnection(uri, username, password)

  def getConn(): Connection = conn

  def main(args: Array[String]) = {

    val sql = "SELECT SOMETHING FROM YOURTABLE"
    val results = getConn.createStatement.executeQuery(sql)

    processResults(results)

    getConn.close

  }

在获得连接之前,您是否尝试过手动注册驱动程序,使用DriverManager.registerDriver(jtdsDriverInstance)其sqlserver而不是我尝试连接的mysql。在我的例子中,classOf语句应该是什么?这取决于您使用的驱动程序,对于Microsoft的驱动程序(sqljdbc),它应该是:classOf[com.Microsoft.sqlserver.jdbc.SQLServerDriver]虽然建议OP使用高级jTDS驱动程序,但您没有提到他必须下载驱动程序并包含在他的应用程序中。如果你修改你的答案,把它包括进来,我会投票的。就在他的代码片段下面,OP表示他已经用jtds测试过了,所以他已经下载了驱动程序
java.sql.DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver)
  val uri = "jdbc:jtds:sqlserver://localhost:1433/yourdatabae"
  val username = "username"
  val password = "password"

  DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver)

  private val conn: Connection = DriverManager.getConnection(uri, username, password)

  def getConn(): Connection = conn

  def main(args: Array[String]) = {

    val sql = "SELECT SOMETHING FROM YOURTABLE"
    val results = getConn.createStatement.executeQuery(sql)

    processResults(results)

    getConn.close

  }