如何使用Map <string,long>作为datastax </string,long>

时间:2014-09-24 01:51:07

标签: hashmap cassandra cql datastax

我正在使用datastax并希望从Cassandra中检索Map

Cassandra在Java中使用String,bigint,bigint map映射为long,但我不能使用基本类型的Map。那么如何使用Map呢?

下面是我的表创建脚本

CREATE TABLE IF NOT EXISTS dealsstorea.deals1( 
   otla text, 
   dtla text , 
   **types Map < text,bigint >**, 
   travelers bigint, 
   pkgRatePlanCode text, 
   pkgRoomTypeCode text,
   numRooms bigint, 
   PRIMARY KEY ((...),
    ..));

2 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,那么您正在使用Java驱动程序从具有Map类型列的CQL表中进行选择,并且您希望将其加载到Java对象中。

如果是这种情况,请使用Java TreeMap

Map<String, Long> myMap = new TreeMap<String, Long>();

Java类型String和Long映射到CQL text和bigint。

答案 1 :(得分:1)

下面我用来将地图数据类型转换为字符串的代码。

--------代码-----------------------

public static String getMaptoSring(DataType dataType,Row row,String columnName)抛出ClassNotFoundException    {

  String  mapstr = "";
 if(row.getColumnDefinitions().getType(columnName).getName().name().equalsIgnoreCase("map"))
 {           
     Map<?, ?> map = row.getMap(columnName, Class.forName("java.lang.String"), Class.forName("java.lang.String"));
     Set<?> set = map.keySet();
     Iterator setIterator = set.iterator();
     while(setIterator.hasNext()){
         Object key = setIterator.next();
         String value = map.get(key).toString();
         if(mapstr =="" )
             mapstr="{"+key.toString()+":"+value;
         else
             mapstr = mapstr+","+key.toString()+":"+value;

     }
     mapstr = mapstr+"}"; 

     //System.out.println("Map Key and value are as following: Key :: "+ key.toString() + ", value :: "+ value);

 }
 return mapstr;

}