Я пытаюсь подключиться к серверу MS/SQL и выполнить оператор count. Я зашел так далеко:

import scala.dbc._
import scala.dbc.Syntax._
import scala.dbc.syntax.Statement._
import java.net.URI

object MsSqlVendor extends Vendor {
    val uri = new URI("jdbc:sqlserver://173.248.X.X:Y/DataBaseName")
    val user = "XXX"
    val pass = "XXX"

    val retainedConnections = 5
    val nativeDriverClass = Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    val urlProtocolString = "jdbc:sqlserver:"
}

object Main {
      def main(args: Array[String]) {
      println("Hello, world!")

      val db = new Database(MsSqlVendor)

      val count = db.executeStatement {
        select (count) from (technical)
        }


      println("%d rows counted", count)
      }
}

Я получаю сообщение об ошибке: "scala.dbc.syntax.Statement.select типа dbc.syntax.Statement.SelectZygote не принимает параметры"

Как мне это настроить?

0
Sunder 4 Мар 2011 в 17:29

1 ответ

Это может быть проблемой:

val count = db.executeStatement {
        select (count) from (technical)
        }

count внутри оператора относится к val count, а не к какому-либо другому count. Тем не менее, есть еще одна проблема, о которой вы сообщаете. Ни count, ни technical определения нигде нет. Возможно, он отсутствует в каком-то другом месте, где вы нашли этот фрагмент. Следующее действительно компилируется, хотя кто-то может догадаться, делает ли оно то, что вы хотите:

val countx = db.executeStatement {
    select fields "count" from "technical"
}

Во всяком случае, я думал, что scala.dbc давно устарел. Однако я не могу найти никакого уведомления об устаревании, и оно все еще связано с библиотечной банкой, даже с багажником.

0
Daniel C. Sobral 4 Мар 2011 в 20:04
У меня есть таблица под названием «техническая». Следуя вашему совету, я получил код для компиляции. Теперь я получаю ошибку времени выполнения: Исключение в потоке "main" com.microsoft.sqlserver.jdbc.SQLServerException: Недопустимое имя столбца "count"
 – 
Sunder
4 Мар 2011 в 20:18
Таблица в базе данных или определение таблицы в scala-коде? Таблица в базе данных не видна как определение из scala. И я думал, что вы хотите сделать count(*), но я не знаю, как это сделать, и даже возможно ли это с scala.dbc.
 – 
Daniel C. Sobral
4 Мар 2011 в 21:58
Код старой школы, который работает: val uri = "jdbc:sqlserver://173.248.XY:1125;databaseName=V;user=XXX;password=YYY;" val nativeDriverClass = Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver") val conn = DriverManager.getConnection(uri) val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) val countxx = statement.executeQuery( "SELECT count(*) as cnt FROM Technical") countxx.next println("подсчитано строк: " + countxx.getString("cnt"))
 – 
Sunder
5 Мар 2011 в 05:14
Никто не использует scala.dbc. Если вам нужна хорошая библиотека sql, я рекомендую ScalaQuery.
 – 
Daniel C. Sobral
5 Мар 2011 в 18:24