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
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
*** Venkat – Happy learning ****