2017-02-26 12 views
1

如果在CQL shell中使用此代碼,我將獲得該鍵空間中所有表的名稱。如何使用Java在Cassandra中檢索表名?

DESCRIBE TABLES; 

我想檢索使用ResulSet相同的數據。以下是我在Java中的代碼。

String query = "DESCRIBE TABLES;"; 


ResultSet rs = session.execute(query); 
    for(Row row : rs) 
     { 
      System.out.println(row); 
     } 

雖然會議和集羣前面已經初始化爲:

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
Session session = cluster.connect("keyspace_name"); 

或者我想知道Java代碼的密鑰空間檢索表名。

+0

'DESCRIBE'只能在CLI上運行。 – ClojureMostly

+0

如何在Java中執行 –

回答

3

系統表的模式在不同版本之間有所不同。這是最好的依靠司機的元數據,將有特定版本的解析內置的。從Java驅動程序使用

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
Collection<TableMetadata> tables = cluster.getMetadata() 
    .getKeyspace("keyspace_name") 
    .getTables(); // TableMetadata has name in getName(), along with lots of other info 

// to convert to list of the names 
List<String> tableNames = tables.stream() 
     .map(tm -> tm.getName()) 
     .collect(Collectors.toList()); 
2
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
Metadata metadata = cluster.getMetadata(); 
     Iterator<TableMetadata> tm = metadata.getKeyspace("Your Keyspace").getTables().iterator(); 

     while(tm.hasNext()){ 
      TableMetadata t = tm.next(); 
      System.out.println(t.getName()); 
     } 

上面的代碼將在傳遞的密鑰空間給你的表名,不論使用的卡桑德拉版本。

+0

'.iterator();'不返回'Collection ',需要將其更改爲迭代器 –

+0

@ChrisLohfink感謝您的建議......我只是試圖合併2步到1和錯過了那部分。 –

相關問題