From c52d2bf312b3c950a187db74fff5a7348e3709c1 Mon Sep 17 00:00:00 2001 From: tledkov-gridgain Date: Mon, 10 Jul 2017 15:19:58 +0300 Subject: [PATCH] IGNITE-5679: Example for thin JDBC driver. This closes #2232. --- .../datagrid/CacheQueryDdlExample.java | 26 ++-- .../ignite/examples/datagrid/JdbcExample.java | 135 ++++++++++++++++++ .../CacheExamplesMultiNodeSelfTest.java | 9 ++ .../examples/CacheExamplesSelfTest.java | 2 +- 4 files changed, 158 insertions(+), 14 deletions(-) create mode 100644 examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java index 84a67cd0c18ea..201dda10bd8ac 100644 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java @@ -56,33 +56,33 @@ public static void main(String[] args) throws Exception { try ( IgniteCache cache = ignite.getOrCreateCache(cacheCfg) ) { - // Create table based on PARTITIONED template with one backup. - cache.query(new SqlFieldsQuery( - "CREATE TABLE person (id LONG PRIMARY KEY, name VARCHAR, city_id LONG) " + - "WITH \"backups=1\"")).getAll(); - // Create reference City table based on REPLICATED template. cache.query(new SqlFieldsQuery( "CREATE TABLE city (id LONG PRIMARY KEY, name VARCHAR) WITH \"template=replicated\"")).getAll(); + // Create table based on PARTITIONED template with one backup. + cache.query(new SqlFieldsQuery( + "CREATE TABLE person (id LONG, name VARCHAR, city_id LONG, PRIMARY KEY (id, city_id)) " + + "WITH \"backups=1, affinityKey=city_id\"")).getAll(); + // Create an index. cache.query(new SqlFieldsQuery("CREATE INDEX on Person (city_id)")).getAll(); print("Created database objects."); - SqlFieldsQuery qry = new SqlFieldsQuery("INSERT INTO person (id, name, city_id) values (?, ?, ?)"); + SqlFieldsQuery qry = new SqlFieldsQuery("INSERT INTO city (id, name) VALUES (?, ?)"); + + cache.query(qry.setArgs(1L, "Forest Hill")).getAll(); + cache.query(qry.setArgs(2L, "Denver")).getAll(); + cache.query(qry.setArgs(3L, "St. Petersburg")).getAll(); + + qry = new SqlFieldsQuery("INSERT INTO person (id, name, city_id) values (?, ?, ?)"); cache.query(qry.setArgs(1L, "John Doe", 3L)).getAll(); cache.query(qry.setArgs(2L, "Jane Roe", 2L)).getAll(); cache.query(qry.setArgs(3L, "Mary Major", 1L)).getAll(); cache.query(qry.setArgs(4L, "Richard Miles", 2L)).getAll(); - qry = new SqlFieldsQuery("INSERT INTO city (id, name) VALUES (?, ?)"); - - cache.query(qry.setArgs(1L, "Forest Hill")).getAll(); - cache.query(qry.setArgs(2L, "Denver")).getAll(); - cache.query(qry.setArgs(3L, "St. Petersburg")).getAll(); - print("Populated data."); List> res = cache.query(new SqlFieldsQuery( @@ -91,7 +91,7 @@ public static void main(String[] args) throws Exception { print("Query results:"); for (Object next : res) - System.out.println(">>> " + next); + System.out.println(">>> " + next); cache.query(new SqlFieldsQuery("drop table Person")).getAll(); cache.query(new SqlFieldsQuery("drop table City")).getAll(); diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java new file mode 100644 index 0000000000000..bc96e427e7ebb --- /dev/null +++ b/examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.ignite.examples.datagrid; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import org.apache.ignite.examples.ExampleNodeStartup; + +/** + * This example demonstrates usage of Ignite JDBC driver. + *

+ * Ignite nodes must be started in separate process using {@link ExampleNodeStartup} before running this example. + */ +public class JdbcExample { + /** + * Executes example. + * + * @param args Command line arguments, none required. + * @throws Exception If example execution failed. + */ + public static void main(String[] args) throws Exception { + print("JDBC example started."); + + // Open JDBC connection + try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/")) { + print("Connected to server."); + + // Create database objects. + try (Statement stmt = conn.createStatement()) { + // Create reference City table based on REPLICATED template. + stmt.executeUpdate("CREATE TABLE city (id LONG PRIMARY KEY, name VARCHAR) " + + "WITH \"template=replicated\""); + + // Create table based on PARTITIONED template with one backup. + stmt.executeUpdate("CREATE TABLE person (id LONG, name VARCHAR, city_id LONG, " + + "PRIMARY KEY (id, city_id)) WITH \"backups=1, affinityKey=city_id\""); + + // Create an index. + stmt.executeUpdate("CREATE INDEX on Person (city_id)"); + } + + print("Created database objects."); + + // Populate City table with PreparedStatement. + try (PreparedStatement stmt = conn.prepareStatement("INSERT INTO city (id, name) VALUES (?, ?)")) { + stmt.setLong(1, 1L); + stmt.setString(2, "Forest Hill"); + stmt.executeUpdate(); + + stmt.setLong(1, 2L); + stmt.setString(2, "Denver"); + stmt.executeUpdate(); + + stmt.setLong(1, 3L); + stmt.setString(2, "St. Petersburg"); + stmt.executeUpdate(); + } + + // Populate Person table with PreparedStatement. + try (PreparedStatement stmt = + conn.prepareStatement("INSERT INTO person (id, name, city_id) values (?, ?, ?)")) { + stmt.setLong(1, 1L); + stmt.setString(2, "John Doe"); + stmt.setLong(3, 3L); + stmt.executeUpdate(); + + stmt.setLong(1, 2L); + stmt.setString(2, "Jane Roe"); + stmt.setLong(3, 2L); + stmt.executeUpdate(); + + stmt.setLong(1, 3L); + stmt.setString(2, "Mary Major"); + stmt.setLong(3, 1L); + stmt.executeUpdate(); + + stmt.setLong(1, 4L); + stmt.setString(2, "Richard Miles"); + stmt.setLong(3, 2L); + stmt.executeUpdate(); + } + + print("Populated data."); + + // Get data. + try (Statement stmt = conn.createStatement()) { + try (ResultSet rs = + stmt.executeQuery("SELECT p.name, c.name FROM Person p INNER JOIN City c on c.id = p.city_id")) { + print("Query results:"); + + while (rs.next()) + System.out.println(">>> " + rs.getString(1) + ", " + rs.getString(2)); + } + } + + // Drop database objects. + try (Statement stmt = conn.createStatement()) { + stmt.executeUpdate("DROP TABLE Person"); + stmt.executeUpdate("DROP TABLE City"); + } + + print("Dropped database objects."); + } + + print("JDBC example finished."); + } + + /** + * Prints message. + * + * @param msg Message to print before all objects are printed. + */ + private static void print(String msg) { + System.out.println(); + System.out.println(">>> " + msg); + } +} \ No newline at end of file diff --git a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java index 6de0273aa5ca0..f940ff7c16146 100644 --- a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java +++ b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java @@ -17,6 +17,8 @@ package org.apache.ignite.examples; +import org.apache.ignite.examples.datagrid.JdbcExample; + /** * Cache examples multi-node self test. */ @@ -42,4 +44,11 @@ public class CacheExamplesMultiNodeSelfTest extends CacheExamplesSelfTest { super.testCacheLockExample(); } + + /** + * @throws Exception If failed. + */ + public void testJdbcThinExample() throws Exception { + JdbcExample.main(EMPTY_ARGS); + } } \ No newline at end of file diff --git a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java index f65d97cacfabe..30f0763f686dc 100644 --- a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java +++ b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java @@ -139,7 +139,7 @@ public void testCacheQueryDmlExample() throws Exception { /** * @throws Exception If failed. */ - public void testCacheQUeryDdlExample() throws Exception { + public void testCacheQueryDdlExample() throws Exception { CacheQueryDdlExample.main(EMPTY_ARGS); }