import com.datastax.driver.core.*; import com.datastax.driver.core.exceptions.NoHostAvailableException; import com.datastax.driver.core.exceptions.QueryExecutionException; import com.datastax.driver.core.exceptions.QueryValidationException; import com.datastax.driver.core.querybuilder.Insert; import com.datastax.driver.core.querybuilder.QueryBuilder; import java.util.List; public class CassandraClient { private Cluster cluster; private Session session; private PreparedStatement prep; /** * Sets up a session to a given node in a cluster * @param node */ public void connect(String node) { cluster = Cluster.builder() .addContactPoint(node) .withCredentials("cassandra", "cassandra") .build(); session = cluster.connect(); } /** * cleans up the session */ public void close() { session.close(); cluster.close(); } /** * This method takes a table name and a set of keys and values, should work with any type of table... he says..! * Its only good for one row at a time though... but good if you are writing a whole load of rows I think. * * @param table * @param keys * @param values */ public void insert(String table, List<String>keys, List<Object>values){ Insert insert; // List<String> keysList = new ArrayList(keyvalues.keySet()); // List<String> valuesList = new ArrayList(keyvalues.values()); String loadkeys[]; Object loadvalues[]; loadkeys = keys.toArray(new String[0]); loadvalues = values.toArray(); insert = QueryBuilder.insertInto(table).values(loadkeys, loadvalues); try { session.execute(insert); } catch (Exception e) { e.printStackTrace(); System.out.println(insert.toString()); } } /** * You need to use this with the makePrepStatement below * * @param values */ public void insert(List<String>values){ try { for (String val : values){ session.execute(prep.bind(val, val + "value2")); } } catch (Exception e) { e.printStackTrace(); } } /** * make a prepared statement object * @param statement */ public void makePrepStatement(String statement){ prep = session.prepare(statement); } /** * reads from the DB using a given set size * @param statement * @param size */ public void fetchStatement(String statement, Integer size){ SimpleStatement stm = new SimpleStatement(statement); stm.setFetchSize(size); ResultSet results = session.execute(stm); int counter = 0; for ( Row row : results ) { System.out.println(row.toString() + "\trow " + counter); counter ++; } } public void runQuery(String query){ SimpleStatement statement = new SimpleStatement(query); try { ResultSet results = session.execute(statement); for (Row row: results) { System.out.println(row.toString()); } } catch (NoHostAvailableException e) { e.printStackTrace(); } catch (QueryExecutionException e) { e.printStackTrace(); } catch (QueryValidationException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } } public void quickTest(){ Metadata metadata = cluster.getMetadata(); System.out.printf("Connected to cluster: %s\n", metadata.getClusterName()); for ( Host host : metadata.getAllHosts() ) { System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n", host.getDatacenter(), host.getAddress(), host.getRack()); } } }