Программа работает при запуске с Scala, ошибки компиляции при попытке скомпилировать с помощью Scalac - PullRequest
9 голосов
/ 11 января 2011

Я тестирую код ниже, выполняет основной запрос к базе данных. Он отлично работает, когда я запускаю его из CLI, используя "scala dbtest.scala", но выдает ошибки компиляции, когда я пытаюсь скомпилировать его с помощью scalac:

[sean@ibmp2 pybackup]$ scalac dbtest.scala
dbtest.scala:5: error: expected class or object definition
val conn_str = "jdbc:mysql://localhost:3306/svn?user=svn&password=svn"
^
dbtest.scala:8: error: expected class or object definition
classOf[com.mysql.jdbc.Driver]
^
dbtest.scala:11: error: expected class or object definition
val conn = DriverManager.getConnection(conn_str)
^
dbtest.scala:12: error: expected class or object definition
try {
^
four errors found

import java.sql.{Connection, DriverManager, ResultSet};
import java.util.Date

// Change to Your Database Config
val conn_str = "jdbc:mysql://localhost:3306/svn?user=xx&password=xx"

// Load the driver
classOf[com.mysql.jdbc.Driver]

// Setup the connection
val conn = DriverManager.getConnection(conn_str)
try {
    // Configure to be Read Only
    val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)

    // Execute Query
    val rs = statement.executeQuery("SELECT * FROM backup")

    // Iterate Over ResultSet
    var svnFiles = Set[String]()
    while (rs.next) {
        val repos = rs.getString("repos")
        val lm = rs.getDate("lastModified")
        val lb = rs.getDate("lastBackedup")
        if (lm.getTime() > lb.getTime()) {
          println(repos + " needs backing up")
          svnFiles += repos
        }
        else {
          println(repos + " doesn't need backing up")
        }
    }
    println(svnFiles)
}
finally {
    conn.close
}

Ответы [ 3 ]

12 голосов
/ 11 января 2011

Вам нужен класс, объект или признак на верхнем уровне, чтобы сделать его легальным источником для компиляции.scala интерпретатор ожидает определения и выражения, тогда как scalac ожидает что-то, что может превратиться в файлы Java .class.

2 голосов
/ 11 января 2011
//imports here

object DbTest {
  def main(args: Array[String]) {
  // your code here
  }
}
1 голос
/ 07 марта 2017

Создайте файл с именем HelloWorld.scala и введите следующее:

object HelloWorld {
  def main(args: Array[String]){
    println("Hello World")
  }
}

Для компиляции примера мы используем scalac, компилятор Scala. Скалак работает как большинство компиляторов: он принимает исходный файл в качестве аргумента, может быть, некоторые опции, и создает один или несколько объектных файлов. Создаваемые им объектные файлы являются стандартными файлами классов Java.

Из командной строки запустите:

scalac HelloWorld.scala

Это создаст несколько файлов классов в текущем каталоге. Один из них будет называться HelloWorld.class и содержит класс, который можно напрямую выполнить с помощью команды scala.

После компиляции программу Scala можно запустить с помощью команды scala. Его использование очень похоже на команду java, используемую для запуска программ на Java, и принимает те же параметры. Приведенный выше пример может быть выполнен с использованием следующей команды, которая выдает ожидаемый результат:

Теперь запустите:

scala HelloWorld.scala

Теперь «Hello World» будет выводиться на консоль.

После исследования этой функциональности я нашел статью, в которой это подробно объясняется, и разместил эту информацию здесь, на SO, чтобы помочь программистам понять этот аспект разработки Scala.

Источник: http://docs.scala -lang.org / tutorials / scala-for-java-programmers.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...