2011-07-04 31 views
2

我想從我的Scala代碼連接到SQL Server數據庫,但我得到'沒有找到合適的驅動程序'異常。我的Scala代碼如下:從Scala連接到SQL Server數據庫的問題

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 

我一直在使用JDBC的JAR由微軟sqljdbc.jarsqljdbc4.jar提供SQL Server還嘗試了。

及以下的堆棧跟蹤我得到:

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) 

什麼我做錯了,我該如何解決呢?

+0

你有沒有獲得連接,使用DriverManager.registerDriver(jtdsDriverInstance)嘗試過手動註冊驅動 – Luciano

回答

1

嘗試包括這個領先你的getConnection的(修改以反映SQLServer的驅動程序)

classOf[com.mysql.jdbc.Driver] 

我寫了使用JDBC和Scala這裏的一個完整的例子 http://solog.co/36/using-scala-with-jdbc-to-connect-to-mysql/

+0

它的SQLSERVER不是mysql的那即時通訊嘗試連接。我的情況應該是什麼類的聲明? – Joe

+4

這取決於你使用哪個驅動程序,對於微軟的驅動程序(sqljdbc),它將是:classOf [com.microsoft.sqlserver.jdbc.SQLServerDriver] –

0

更換

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") 
+0

儘管OP給出了使用卓越jTDS驅動程序的極好建議,但是你沒有提及他必須下載驅動程序並將其包含在他的應用程序中。如果你修改你的答案,包括這個,我會upvote。 – Perception

+0

在他的代碼片段下方,OP表示他已經用jtds測試過了,所以他已經下載了驅動程序 – gruggie

1

喬 您需要做的!

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

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

然後下載的罐子分貝 如果你需要的PostgreSQL和我一樣:-D wget的postgresql-9.0-801.jdbc3.jar~mysql.jar

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

0

我發現這段代碼爲我工作:

嘗試使用以下方法註冊您的驅動程序:

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 

    }