程序在使用scala运行时有效,在尝试使用scalac编译时会出现编译错误

时间:2011-01-10 21:32:47

标签: scala compilation

我正在测试下面的代码,做一个基本的数据库查询。当我使用“scala dbtest.scala”从CLI运行它时,它工作正常,但是当我尝试使用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 个答案:

答案 0 :(得分:12)

您需要顶级的类,对象或特征才能使其成为合法的编译源。 scala解释器期望定义和表达式,而scalac期望可以变成Java .class文件。

答案 1 :(得分:2)

//imports here

object DbTest {
  def main(args: Array[String]) {
  // your code here
  }
}

答案 2 :(得分:1)

创建一个名为HelloWorld.scala的文件,然后输入以下内容:

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

为了编译示例,我们使用Scalac,即Scala编译器。 scalac与大多数编译器一样工作:它将源文件作为参数,可能是一些选项,并生成一个或多个目标文件。它生成的目标文件是标准的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