/*
* Copyright (C) 2012-2015 DataStax Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.datastax.driver.examples.basic;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
/**
* Creates a keyspace and tables, and loads some data into them.
* <p/>
* Preconditions:
* - a Cassandra cluster is running and accessible through the contacts points identified by CONTACT_POINTS and PORT.
* <p/>
* Side effects:
* - creates a new keyspace "simplex" in the cluster. If a keyspace with this name already exists, it will be reused;
* - creates two tables "simplex.songs" and "simplex.playlists". If they exist already, they will be reused;
* - inserts a row in each table.
*
* @see <a href="http://datastax.github.io/java-driver/manual/">Java driver online manual</a>
*/
public class CreateAndPopulateKeyspace {
static String[] CONTACT_POINTS = {"127.0.0.1"};
static int PORT = 9042;
public static void main(String[] args) {
CreateAndPopulateKeyspace client = new CreateAndPopulateKeyspace();
try {
client.connect(CONTACT_POINTS, PORT);
client.createSchema();
client.loadData();
client.querySchema();
} finally {
client.close();
}
}
private Cluster cluster;
private Session session;
/**
* Initiates a connection to the cluster
* specified by the given contact point.
*
* @param contactPoints the contact points to use.
* @param port the port to use.
*/
public void connect(String[] contactPoints, int port) {
cluster = Cluster.builder()
.addContactPoints(contactPoints).withPort(port)
.build();
System.out.printf("Connected to cluster: %s%n", cluster.getMetadata().getClusterName());
session = cluster.connect();
}
/**
* Creates the schema (keyspace) and tables
* for this example.
*/
public void createSchema() {
session.execute("CREATE KEYSPACE IF NOT EXISTS simplex WITH replication " +
"= {'class':'SimpleStrategy', 'replication_factor':1};");
session.execute(
"CREATE TABLE IF NOT EXISTS simplex.songs (" +
"id uuid PRIMARY KEY," +
"title text," +
"album text," +
"artist text," +
"tags set<text>," +
"data blob" +
");");
session.execute(
"CREATE TABLE IF NOT EXISTS simplex.playlists (" +
"id uuid," +
"title text," +
"album text, " +
"artist text," +
"song_id uuid," +
"PRIMARY KEY (id, title, album, artist)" +
");");
}
/**
* Inserts data into the tables.
*/
public void loadData() {
session.execute(
"INSERT INTO simplex.songs (id, title, album, artist, tags) " +
"VALUES (" +
"756716f7-2e54-4715-9f00-91dcbea6cf50," +
"'La Petite Tonkinoise'," +
"'Bye Bye Blackbird'," +
"'Joséphine Baker'," +
"{'jazz', '2013'})" +
";");
session.execute(
"INSERT INTO simplex.playlists (id, song_id, title, album, artist) " +
"VALUES (" +
"2cc9ccb7-6221-4ccb-8387-f22b6a1b354d," +
"756716f7-2e54-4715-9f00-91dcbea6cf50," +
"'La Petite Tonkinoise'," +
"'Bye Bye Blackbird'," +
"'Joséphine Baker'" +
");");
}
/**
* Queries and displays data.
*/
public void querySchema() {
ResultSet results = session.execute(
"SELECT * FROM simplex.playlists " +
"WHERE id = 2cc9ccb7-6221-4ccb-8387-f22b6a1b354d;");
System.out.printf("%-30s\t%-20s\t%-20s%n", "title", "album", "artist");
System.out.println("-------------------------------+-----------------------+--------------------");
for (Row row : results) {
System.out.printf("%-30s\t%-20s\t%-20s%n",
row.getString("title"),
row.getString("album"),
row.getString("artist"));
}
}
/**
* Closes the session and the cluster.
*/
public void close() {
session.close();
cluster.close();
}
}