2011-01-10 13 views
8

Estoy probando el código siguiente, hace una consulta de base de datos básica. Funciona bien cuando lo ejecuto desde la CLI usando "Scala dbtest.scala", pero me da errores de compilación cuando intento compilar con scalac:El programa funciona cuando se ejecuta con scala, obtiene errores de compilación cuando intenta compilarlo con scalac

 
[[email protected] 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 
} 
 

Respuesta

11

Usted necesita ya sea una clase, objeto, o rasgo en el nivel superior para que sea una fuente legal para compilar. scala intérprete espera definiciones y expresiones, mientras que scalac espera algo que pueda convertirse en archivos Java .class.

+1

bien, pero es legal para ejecutar el código como lo tengo como un guión a través Scala línea de comandos? Funciona desde la CLI –

+1

Sí, como una secuencia de comandos, Scala no requiere un contenedor de nivel superior. –

+0

Además, un recordatorio de '' 'scala -help''':' '' Todas las opciones para scalac (ver scalac -help) también están permitidas .'' Entonces, adelante, ejecútelo con algo como '' 'scala - optimizar dbtest.scala''' – opyate

2
//imports here 

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

crear un archivo llamado HelloWorld.scala, y escriba lo siguiente:

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

para compilar el ejemplo, utilizamos scalac, el compilador Scala. Scalac funciona como la mayoría de los compiladores: toma un archivo de origen como argumento, tal vez algunas opciones, y produce uno o varios archivos de objetos. Los archivos de objeto que produce son archivos de clase estándar de Java.

Desde la línea de comandos, ejecute:

scalac HelloWorld.scala 

Esto generará unos archivos de clase en el directorio actual. Uno de ellos se llamará HelloWorld.class y contiene una clase que se puede ejecutar directamente con el comando scala.

Una vez compilado, se puede ejecutar un programa Scala utilizando el comando scala. Su uso es muy similar al comando java utilizado para ejecutar programas Java, y acepta las mismas opciones. El ejemplo anterior se puede ejecutar mediante el siguiente comando, que produce el resultado esperado:

Ahora ejecute:

scala HelloWorld.scala 

Ahora "Hello World", se imprimirá en la consola.

Después de investigar esta funcionalidad, encontré un artículo, que explica esto en detalle, y publiqué esa información aquí en SO para ayudar a los programadores a entender este aspecto del desarrollo de Scala.

Fuente: http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html

Cuestiones relacionadas