0

scala (2.9.2) で postgres データベースに接続しています。

初めて SELECT を作成すると (IntelliJ の sbt ターミナルで「run」を使用してコードを実行することにより)、うまく機能しますが、sbt シェルで再度「run」を実行すると、次のようなエラーが表示されます。

[error] (run-main) java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/db
java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/db
    at java.sql.DriverManager.getConnection(DriverManager.java:602)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
    at SequenceGenerator$.connect(Validator.scala:50)
    at SequenceGenerator$.generate(Validator.scala:54)
    at Main$.main(Validator.scala:32)
    at Main.main(Validator.scala)
    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)

build.sbt ファイルのこの行で、sbt を介して postgres コネクタをインストールしました。

libraryDependencies += "postgresql" % "postgresql" % "9.1-901.jdbc4"

これは、SELECTを作成するための私のコードです:

object SequenceGenerator{
  def connect() = {
    DriverManager.getConnection("jdbc:postgresql://localhost/db","user", "pass")

  }
  def generate() = {
    val db = connect()
    val st = db.createStatement
    val res = st.executeQuery("SELECT value from table LIMIT 2")
    while( res.next) {
      println(res.getString("value"))
    }
  }
}
4

2 に答える 2

5

mysql jdbcドライバーで同じ問題を回避するには、統合テストのスタートアップにこれを追加する必要がありました。

Class.forName("com.mysql.jdbc.Driver").newInstance

SBTがドライバーをアンロードする理由はわかりませんが、次のようなものがおそらく機能します。

object SequenceGenerator{
  //Use whatever your jdbc driver class should be here, I'm just guessing
  Class.forName("org.postgresql.Driver").newInstance

  def connect() = {
    DriverManager.getConnection("jdbc:postgresql://localhost/db","user", "pass")
  }
  def generate() = {
    val db = connect()
    val st = db.createStatement
    val res = st.executeQuery("SELECT value from table LIMIT 2")
    while( res.next) {
      println(res.getString("value"))
    }
  }
}
于 2013-03-05T15:01:44.120 に答える