Проблема подключения к базе данных SQL Server из Scala - PullRequest
2 голосов
/ 04 июля 2011

Я пытаюсь подключиться к базе данных SQL Server из своего кода Scala, но получаю исключение «Не найден подходящий драйвер». Мой код 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

Я также пытался использовать JAR-файлы JDBC для SQL Server, предоставляемые Microsoft sqljdbc.jar и sqljdbc4.jar.

А ниже - трассировка стека, которую я получаю:

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)

Что я делаю не так и как я могу это исправить?

Ответы [ 4 ]

1 голос
/ 13 июля 2011

Джо. Вам нужно сделать!

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

Class.forName("org.postgresql.Driver")
val conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/clients","username","password")

, а затем скачать -jar db, если вам нужен postgresql, как я :-D wget postgresql-9.0-801.jdbc3.jar или ~mysql.jar

exec: scala -cp postgresql-9.0-801.jdbc3.jar file.scala

1 голос
/ 04 июля 2011

Попробуйте включить это перед вашим getConnection (измените его так, чтобы он отражал драйвер SQLServer)

classOf[com.mysql.jdbc.Driver]

Я написал полный пример использования JDBC и Scala здесь http://solog.co/36/using-scala-with-jdbc-to-connect-to-mysql/

0 голосов
/ 27 мая 2012

Я нашел этот кусок кода для меня:

Попробуйте зарегистрировать драйвер с помощью следующего:

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

  }
0 голосов
/ 05 июля 2011

Заменить

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

на

Class.forName("net.sourceforge.jtds.jdbcx.JtdsDataSource")
val conn = DriverManager.getConnection("jdbc:jtds:sqlserver://hostname:port/DBName","myusername","mypassword")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...