Templates by BIGtheme NET

Bound Statement Vs Prepared Statement

In this Article, I will show How to work with Cassandra Bound Statement.
How this differ from Prepared Statement.

Few questions come to mind, while using Bound Statement are.

When to Use Bound Statement?

– If the provided statements that map to different tables? Yes

– The goal of the bound statement is to be able to execute a bunch
of different queries that follow some similar query structure,
But not the exact same query concurrently.

Tools Uses :

1) spring-data-cassandra-1.2.1.RELEASE
2) Apache-cassandra-2.1.6
3) eclipse version Luna 4.4.1.
4) Maven 3.3.3
5) JDK 1.6 or above

If you are completely new to Apache Cassandra,
please refer apache-cassandra-quick-start

Prerequisites :

1) Cassandra Server should be up and running.
2) key space should be created with name “devJavaSource”

Steps to be followed :

1) Create a maven project in eclipse.
2) Add cassandra-driver-core 2.1.6 jar file as dependency in pom.xml file.
3) Start Cassandra server.
4) Write a simple java program.
5) Demo

2) Add cassandra-driver-core 2.1.6 jar file as dependency in pom.xml file :

Cassandra java driver cassandra-driver-core 2.1.6 jar is required to run java program,
So add this as dependency in pom.xml file.

<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-core</artifactId>
  <version>2.1.6</version>
</dependency>

3) Start Cassandra server :

Go to your home directory, where cassandra server is installed or extracted.
Command to start Casandra server is,

C:\apache-cassandra-2.1.6\bin> cassandra.bat -f

server

4) Write a simple java program :

Create a simple maven project and add Cassandra dependency.

Complete pom.xml file is Here,
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.devjavasource.cassandra</groupId>
  <artifactId>boundStatement</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>boundStatement</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
		<groupId>com.datastax.cassandra</groupId>
		<artifactId>cassandra-driver-core</artifactId>
		<version>2.1.6</version>
	</dependency>
  </dependencies>
</project>

Written two java files,
User.java – Is a simple Value Object, holds one user details.

User.java

package com.devjavasource.cassandra.boundStatement;

public class User {
	
	private String id;
	private String name;
	private String address;
	
	public User(String id, String address, String name){
		this.id = id;
		this.address = address;
		this.name = name;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

Another java that doing cassandra insert and update the user details in User.

App.java

package com.devjavasource.cassandra.boundStatement;

import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;

public class App {
	public static void main(String[] args) {

		Cluster cluster = null;
		Session session = null;

		try {
			// Connect to the cluster and keyspace "devjavasource"
			final Cluster.Builder clusterBuilder = Cluster.builder()
					.addContactPoint("127.0.0.1").withPort(9042)
					.withCredentials("devjavasource", "devjavasource");
			cluster = clusterBuilder.build();
			session = cluster.connect("devjavasource");

			// database operations insert
			PreparedStatement insertStatement = session.prepare(INSERT_QUERY);

			User user = new User("11104", "USA", "Stuart");
			bindValuesToStatement(insertStatement, session, user);

			getUsersAllDetails(session);

			// database operations update
			PreparedStatement updateStatement = session.prepare(UPDATE_QUERY);
			user.setName("Stuart_Updated");
			user.setAddress("USA_Updated");
			bindValuesToStatement(updateStatement, session, user);

			getUsersAllDetails(session);

			// delete the inserted record
			session.execute(" delete FROM users where id = 11104");

		} catch (final Exception exp) {
			exp.printStackTrace();
		} finally {
			// Close Cluster and Session objects
			cluster.close();
			session.close();
		}
	}

	private static void bindValuesToStatement(
			final PreparedStatement inPreparedStatement,
			final Session inSession, final User inUser) {
		BoundStatement boundStatement = new BoundStatement(inPreparedStatement);
		boundStatement.enableTracing();
		inSession.execute(boundStatement.bind(inUser.getAddress(),
				inUser.getName(), Integer.parseInt(inUser.getId())));
	}

	private static void getUsersAllDetails(final Session inSession) {
		// Use select to get the users table data
		ResultSet results = inSession.execute("SELECT * FROM users");
		for (Row row : results) {
			System.out.format("%s %d %s\n", row.getString("name"),
					row.getInt("id"), row.getString("address"));
		}
	}

	final static String INSERT_QUERY = "INSERT INTO users (address, name, id ) VALUES (?, ?, ?)";
	final static String UPDATE_QUERY = "UPDATE users set address = ?, name=? WHERE id= ?";
}

Run Maven project :

Select and Run As -> Java Application.

Out Put :

******* database operations insert ********
Stuart 11104 USA
******* database operations update ********
Stuart_Updated 11104 USA_Updated

You can download complete project, Here

boundStatement

*** Venkat – Happy learning ****