-
Notifications
You must be signed in to change notification settings - Fork 409
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sample code for AGE-JDBC driver (#390)
* sample code for age-jdbc-drivers * cleaned the code * update query statement
- Loading branch information
1 parent
dedd988
commit 1e7c7f5
Showing
1 changed file
with
134 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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(); | ||
} | ||
|
||
} |