2011-01-10 35 views
8

Tôi đang thử nghiệm mã bên dưới, thực hiện truy vấn cơ sở dữ liệu cơ bản. Nó hoạt động tốt khi tôi chạy nó từ CLI bằng "scala dbtest.scala", nhưng mang lại cho tôi biên dịch lỗi khi tôi cố gắng để biên dịch nó với scalac:Chương trình hoạt động khi chạy với scala, nhận lỗi biên dịch khi cố biên dịch bằng 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 
} 
 

Trả lời

11

Bạn cần hoặc một lớp học, đối tượng, hoặc đặc điểm ở cấp cao nhất để biến nó trở thành một nguồn hợp pháp để biên dịch. Trình thông dịch scala mong đợi các định nghĩa và biểu thức, trong khi scalac mong đợi một thứ có thể biến thành các tệp Java .class.

+1

OK, nhưng pháp lý để chạy mã như tôi có nó giống như tập lệnh thông qua dòng lệnh scala? Nó hoạt động từ CLI –

+1

Có, như một tập lệnh, Scala không yêu cầu một thùng chứa cấp cao nhất. –

+0

Ngoài ra, lời nhắc từ '' 'scala -help''':' '' Tất cả các tùy chọn cho scalac (xem scalac -help) cũng được cho phép .''' Vì vậy, hãy tiếp tục và chạy nó với một cái gì đó như '' 'scala - tối ưu hóa dbtest.scala''' – opyate

2
//imports here 

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

Tạo một tập tin gọi HelloWorld.scala, và nhập dữ liệu sau:

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

Để biên dịch ví dụ này, chúng tôi sử dụng scalac, trình biên dịch Scala. scalac hoạt động giống như hầu hết các trình biên dịch: nó lấy một tệp nguồn làm đối số, có thể một số tùy chọn và tạo một hoặc một vài tệp đối tượng. Các tệp đối tượng mà nó tạo ra là các tệp lớp Java chuẩn.

Từ dòng lệnh, hãy chạy:

scalac HelloWorld.scala 

này sẽ tạo ra một vài file class trong thư mục hiện hành. Một trong số chúng sẽ được gọi là HelloWorld.class và chứa một lớp có thể được thực thi trực tiếp bằng lệnh scala.

Sau khi được biên dịch, một chương trình Scala có thể được chạy bằng lệnh scala. Việc sử dụng nó rất giống với lệnh java được sử dụng để chạy các chương trình Java và chấp nhận các tùy chọn tương tự. Ví dụ trên có thể được thực hiện bằng cách sử dụng lệnh sau đây, trong đó sản xuất sản lượng dự kiến:

Bây giờ chạy:

scala HelloWorld.scala 

Now "Hello World", sẽ được in ra cửa sổ Console.

Sau khi nghiên cứu chức năng này, tôi đã tìm thấy một bài viết, giải thích chi tiết điều này và đăng thông tin đó lên SO để giúp các lập trình viên hiểu được khía cạnh phát triển Scala này.

Nguồn: http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html

Các vấn đề liên quan