2016-01-02 3 views
1

Ниже моя модная программа 2.0 в Scala IntelliJ IDEA 15.0.2.slick 2.0 error row._1 ошибка в Scala Intellij IDEA 15.0.2

Эта программа дает компиляции ошибки времени в IntelliJ IDEA:

не удается разрешить SYMBOL _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

Когда я создал ту же программу в затмении-язя лестницу, программа прекрасно работает и получает результат.

Является ли это существующей проблемой или мне что-то не хватает на моей стороне?

+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. Кроме того, версия scala - 2.11.7 в обеих IDE. Для вашего предложения кода мы можем использовать таблицу любого пользовательского объекта класса clase или типов данных Tuple of OOB. Слик поддерживает оба из них. –

 Смежные вопросы

  • Нет связанных вопросов^_^