2016-08-25 5 views
0

Я добавляю новые функции в проект с открытым исходным кодом (столбец) для миграции таблиц Кассандры. У меня есть проблема в работе, которая вставляет значения в новую таблицу. Существует таблица в Кассандре:Примитивные типы для AnyRef в Scala

 
create table customer(
    name text, 
    age int, 
    point int, 
    primary key(name, age) 
) 

Я хочу, чтобы мигрировать из этой таблицы в test_person таблице.

 
create table test_person (
    name text, 
    surname text, 
    point int, 
    city text, 
    primary key(name) 
) 

Вот операция:

 


var s: PreparedStatement = session.prepare("insert into test_person (name, age, point) values (?, ?, ?)"); 

var r: Row = session.execute("select * from customer").one() 

var arr: Array[AnyRef] = new Array[AnyRef](3) 

arr(0) = row.getObject("name") 

arr(1) = row.getObject("age") 

arr(2) = row.getObject("point") 



session.execute(s.bind(arr)) 

 

Это сообщение об ошибке: Несоответствие типа Невозможно присвоить примитивное значение объекта.

Я получил объект и назначил массив, набранный AnyRef. Что не так?

Как я могу справиться с этим

+0

Какая строка вызывает ошибку? – Samar

+0

arr (1) = row.getObject ("age") arr (2) = row.getObject ("point") – Mustafa

+0

does row.getObject ("age") возвращает объект или int? – Samar

ответ

0

Это происходит потому, что неявное преобразование происходит от java.lang.Integer к Int. И Int имеет тип AnyVal, а не AnyRef. Попробуйте использовать массив [Любой] вместо массива [AnyRef] ИЛИ Вы можете отключить неявное преобразование с помощью import scala.Predef.{Integer2int => _}

// This method in Predef.scala is causing the conversion 
implicit def Integer2int(x: java.lang.Integer): Int 
0

Это происходит потому, что, AnyRef для объектов и AnyVal для примитивов. Вы можете использовать Array[Any] в вашем случае:

var s: PreparedStatement = session.prepare("insert into test_person (name, age, point) values (?, ?, ?)"); 
var r: Row = session.execute("select * from customer").one() 
val arr = Array(r.getString("name"), r.getInt("age"), r.getInt("point")) 
+0

Это работает, но я не хочу знать, сколько столбцов есть в таблицах. Могу ли я сделать это в массиве Array (..)? – Mustafa

+0

Вы можете использовать ArrayBuffer типа Any. Затем вы можете добавлять новые записи. – tuxdna

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