2016-01-02 64 views
1

下面是我在Scala IntelliJ IDEA 15.0.2中的slick 2.0程序。slick 2.0错误Scala Intellij IDEA中的row._1错误15.0.2

这个节目是给在IntelliJ IDEA的编译时错误:

无法解析符号_1

我依恋错误的屏幕截图也。

import java.sql.Timestamp 
import scala.slick.driver.PostgresDriver.simple._ 

case class User(
       id: Long, 
       username: String, 
       email: Option[String], 
       password: String, 
       created: Timestamp) 

//a simple table called 'users' 
class Users(tag: Tag) extends Table[User](tag, "users") { 

    def id = column[Long]("id", O.PrimaryKey, O.AutoInc) 
    def username = column[String]("username", O.NotNull) 
    // an Option[] in the case class maps to a Nullable field here 
    def email = column[String]("email", O.Nullable) 
    def password = column[String]("password", O.NotNull) 
    // this is a hack for postgresql; if you're using another DB, comment this out 
    // and the corresponding field in the case class 
    def created = column[Timestamp]("created_at", O.NotNull, O.DBType("timestamp default now()")) 

    // usernames should be unique 
    def idx = index("users_unique_username", (username), unique = true) 

    //define the "shape" of a single data record 
    //we're saying that an object of class User (our case class) should be returned 
    def * = (id, username, email.?, password,created) <> (User.tupled, User.unapply) 
} 

val connectionUrl = "jdbc:postgresql://localhost/slick?user=slick&password=slick" 
Database.forURL(connectionUrl, driver = "org.postgresql.Driver") withSession { 
    implicit session => 
    val users = TableQuery[Users] 

    // SELECT * FROM users 
    users.list foreach { row => 
     println("user with id " + row._1 + " has username " + row._2) 
    } 

    // SELECT * FROM users WHERE username='john' 
    users.filter(_.username === "john").list foreach { row => 
     println("user whose username is 'john' has id "+row._1) 
    } 
} 

Slick error in intellij IDEA

当我在eclipse阶-IDE所创建的相同的程序,该程序运行正常,并获取结果。

这是一个存在的问题,还是我错过了我的一面?

+0

在我看来,行实际上是用户的一个实例。因此'._1'应该是'.id','._2'应该是'.username'。我不知道为什么这会在Eclipse中起作用。 – colinjwebb

回答

0

在这个

class Users(tag: Tag) extends Table[User](tag, "users") { 

看看如果侑表中返回元组它看起来像

Table[(Long, String, Option[String] <...>] 

然后你

println("user with id " + row._1 + " has username " + row._2) 

将是有效的。我认为你的IDE在某种程度上配置错误,并且运行你的旧代码。这就是你的代码可能被固定编译和工作的方式:

// SELECT * FROM users 
users.list foreach { user => 
    println("user with id " + user.id + " has username " + user.name) 
} 


// SELECT * FROM users WHERE username='john' 
users.filter(_.username === "john").list foreach { user => 
    println("user whose username is 'john' has id "+ user.id) 
} 
+0

我不认为代码有问题,因为代码在intellij IDEA和eclipse scala IDE中都是一样的。另外,两个IDE中的scala版本都是2.11.7。对于您对代码的建议,我们可以使用任何自定义Clase类对象的表或OOB数据类型的Tuple。 Slick支持他们两人。 –