2016-08-25 11 views
0

オープンソースプロジェクト(ピラー)に新しい機能を追加して、Cassandraテーブルを移行しました。私は新しいテーブルを挿入する操作に問題があります。 カサンドラのテーブルがあります:ScalaのAnyRefへのプリミティブ型

 
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型の配列を割り当てます。なにが問題ですか?

にはどうすればいいのIntにはjava.lang.Integerから起こっ暗黙の変換があるので、これが起こっているこの

+0

行はエラーをスロー:あなたはあなたのケースでArray[Any]を使用できますか? – Samar

+0

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

+0

row.getObject( "age")はオブジェクトまたはintを返しますか? – Samar

答えて

0

を扱うことができます。 IntはAnyRefではなくAnyValである。 [AnyRef]配列の代わりに[任意]配列を使用してみてくださいまたはあなたがAnyRefは、オブジェクトのためのものであり、AnyValがプリミティブのためであるからであるimport scala.Predef.{Integer2int => _}

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

によって暗黙的な変換を無効にすることができます。

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

Any型のArrayBufferを使用できます。その後、さらに多くのエントリを追加することができます。 – tuxdna

関連する問題