Sample code for AGE-JDBC driver (#390)
* sample code for age-jdbc-drivers
* cleaned the code
* update query statement
diff --git a/drivers/jdbc/samples/AgeBasic.java b/drivers/jdbc/samples/AgeBasic.java
new file mode 100644
index 0000000..f6f2964
--- /dev/null
+++ b/drivers/jdbc/samples/AgeBasic.java
@@ -0,0 +1,134 @@
+import org.apache.age.jdbc.base.Agtype;
+import org.postgresql.jdbc.PgConnection;
+
+import java.sql.*;
+
+public class AgeBasic {
+
+ public static PgConnection connection;
+ static final String DB_URL = "jdbc:postgresql://localhost:5432/demo";
+ static final String USER = "postgres";
+ static final String PASS = "pass";
+
+ public static void main(String[] args) {
+
+ // Open a connection
+ try {
+ makeConnection();
+
+ if (graphExist("demo_graph"))
+ dropGraph();
+
+ createGraph();
+ getResult();
+ getObjectsFromResult();
+
+ // after all
+ dropGraph();
+ closeConnection();
+ }
+ catch (Exception e) {
+ System.out.println(e.getMessage());
+ }
+
+ }
+
+ /**
+ * Creating a connection with the database
+ * Loading AGE extension & configuring database for AGE
+ */
+ public static void makeConnection() throws SQLException {
+ connection = DriverManager.getConnection(DB_URL, USER, PASS).unwrap(PgConnection.class);
+ connection.addDataType("agtype", Agtype.class);
+
+ // configure AGE
+ Statement statement = connection.createStatement();
+ statement.execute("CREATE EXTENSION IF NOT EXISTS age;");
+ statement.execute("LOAD 'age'");
+ statement.execute("SET search_path = ag_catalog, \"$user\", public;");
+ }
+
+ /**
+ * Using Agtype parser on the ResultSet to get the result in Agtype.
+ */
+ public static void getResult() throws SQLException {
+ Statement stmt = connection.createStatement();
+ ResultSet rs = stmt.executeQuery("SELECT * from cypher('demo_graph', $$ MATCH (n) RETURN n $$) as (n agtype);");
+
+ // Returning result as Agtype
+ System.out.println("\nRESULT AS AGTYPE");
+ while (rs.next()) {
+ Agtype returnedAgtype = rs.getObject(1, Agtype.class);
+ System.out.println(returnedAgtype.getValue());
+ }
+ }
+
+ /**
+ * Using Agtype to extract specific objects from the Agtype result.
+ */
+ public static void getObjectsFromResult() throws SQLException {
+ Statement stmt = connection.createStatement();
+ ResultSet rs = stmt.executeQuery("SELECT * from cypher('demo_graph', $$ MATCH (n) RETURN n $$) as (n agtype);");
+
+ System.out.println("\nEXTRACTING OBJECTS FROM RESULT");
+ while (rs.next()) {
+ Agtype returnedAgtype = rs.getObject(1, Agtype.class);
+ String nodeLabel = returnedAgtype.getMap().getObject("label").toString();
+ String nodeProp = returnedAgtype.getMap().getObject("properties").toString();
+
+ System.out.println("Vertex : " + nodeLabel + ", \tProps : " + nodeProp);
+ }
+ }
+
+ /**
+ * Creating a 'demo_graph'.
+ * Then adding some Nodes.
+ * Then connecting them with some relation.
+ */
+ public static void createGraph() throws SQLException {
+ Statement statement = connection.createStatement();
+
+ // Nodes labeled as PERSON
+ statement.execute("SELECT create_graph('demo_graph');");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : 'imran', bornIn : 'Pakistan'}) $$) AS (a agtype);");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : 'ali', bornIn : 'Pakistan'}) $$) AS (a agtype);");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : 'usama', bornIn : 'Pakistan'}) $$) AS (a agtype);");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : 'akbar', bornIn : 'Pakistan'}) $$) AS (a agtype);");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : 'james', bornIn : 'US'}) $$) AS (a agtype);");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : 'david', bornIn : 'US'}) $$) AS (a agtype);");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : 'max', bornIn : 'US'}) $$) AS (a agtype);");
+
+ // Nodes labeled as COUNTRY
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Country{name : 'Pakistan'}) $$) AS (a agtype);");
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ CREATE (n:Country{name : 'US'}) $$) AS (a agtype);");
+
+ // creating relationship (n:PERSON)-[r:BORNIN]-(n:COUNTRY)
+ statement.execute("SELECT * FROM cypher('demo_graph', $$ MATCH (a:Person), (b:Country) WHERE a.bornIn = b.name CREATE (a)-[r:BORNIN]->(b) RETURN r $$) as (r agtype);");
+ }
+
+ /**
+ * After done querying drop the whole graph.
+ * Dropping the GRAPH with CASCADE:true. Deletes the whole data in the graph.
+ */
+ public static void dropGraph() throws SQLException {
+ Statement statement = connection.createStatement();
+ statement.execute("SELECT * FROM ag_catalog.drop_graph('demo_graph', true);");
+ }
+
+ public static boolean graphExist(String graph_name) throws SQLException {
+
+ PreparedStatement ps = connection.prepareStatement("SELECT * FROM ag_catalog.ag_graph WHERE name = ?");
+ ps.setString(1, graph_name);
+ ps.executeQuery();
+ ResultSet rs = ps.getResultSet();
+ return !(!rs.isBeforeFirst() && rs.getRow() == 0);
+ }
+
+ /**
+ * At last close the connection before exit.
+ */
+ public static void closeConnection() throws SQLException {
+ connection.close();
+ }
+
+}
\ No newline at end of file