Java連線Neo4j
阿新 • • 發佈:2018-11-19
一、使用jdbc連線
使用jdbc連線沒有大變化,使用的時候和mysql過程比較類似,除了Cypher
Class.forName("org.neo4j.jdbc.Driver"); String url ="jdbc:neo4j:http://localhost:7474"; Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("match (n) return n.age,n.name,n"); while(rs.next()) { System.out.println(rs.getString("n.name")+"\t"+rs.getString("n.age")); System.out.println("rs.getString(\"n\")\t"+rs.getString("n")); System.out.println("rs.getString(2)\t"+rs.getString(2)); System.out.println("rs.getString(3)\t"+rs.getString(3)); }
二、使用GraphDatabase連線
其中用到的Values.parameters(),可以先生成一個數組(一般為Object[]型別),其中奇數項為引數名,偶數項為引數值,返回值為Value型別,以下是原始碼:
即可有類似如下寫法:public static Value parameters( Object... keysAndValues )//不定長引數的傳遞通過陣列實現 { if ( keysAndValues.length % 2 != 0 ) { throw new ClientException( "Parameters function requires an even number " + "of arguments, " + "alternating key and value. Arguments were: " + Arrays.toString( keysAndValues ) + "." ); } HashMap<String,Value> map = newHashMapWithSize( keysAndValues.length / 2 ); for ( int i = 0; i < keysAndValues.length; i += 2 ) { Object value = keysAndValues[i + 1]; assertParameter( value ); map.put( keysAndValues[i].toString(), value( value ) ); } return value( map ); }
String message = "message"; String message2= "message2"; Object[] obj= new Object[] {"message", message,"message2",message2}; Value v =Values.parameters( obj );//傳入到parameters方法中的是陣列 StatementResult result = tx.run( "CREATE (a:Greeting) " + "SET a.message = $message,a.message2=$message2 " + "RETURN a.message + ', from node ' + id(a)", v );
以下是官網扒的demo稍作修改:
import java.util.List;
import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Record;
import org.neo4j.driver.v1.Session;
import org.neo4j.driver.v1.StatementResult;
import org.neo4j.driver.v1.Transaction;
import org.neo4j.driver.v1.TransactionWork;
import org.neo4j.driver.v1.Values;
import org.neo4j.driver.v1.Driver;
public class GraphDatabaseConnection implements AutoCloseable {
private final Driver driver;
public GraphDatabaseConnection() {
//default port is 7687
String uri="bolt://localhost:7687";
driver = GraphDatabase.driver(uri,AuthTokens.basic(username,password));
}
public void close() {
driver.close();
}
public void printGreeting( final String message )
{
try ( Session session = driver.session() )
{
String greeting = session.writeTransaction( new TransactionWork<String>()
{
@Override
public String execute( Transaction tx )
{
String statementTemplate="MATCH (n) RETURN n.name,n.age,n LIMIT 25";
/*StatementResult result = tx.run( "CREATE (a:Greeting) " +
"SET a.message = $message " +
"RETURN a.message + ', from node ' + id(a)",
Values.parameters( "message", message ) );
return result.single().get( 0 ).asString();*/
StatementResult result = tx.run(statementTemplate);
List<Record> resultList = result.list();
String resultString="";
for (Record record : resultList) {
System.out.println(record.get("n.name")+"\t"+record.get("n.age"));
System.out.println(record.get("n").get("name")+"\t"+record.get("n").get("age"));
resultString=resultString+"\n\t"+record.get(0).toString()+record.get(1).toString();
}
return resultString;
}
} );
System.out.println( greeting );
}
}
public static void main( String... args ) throws Exception
{
try ( GraphDatabaseConnection greeter = new GraphDatabaseConnection() )
{
greeter.printGreeting( "hello, world" );
}
}
}
關於GraphDatabase連線方式,其實官網有demo點選開啟連結,只是有一處將Values.parameters寫成了parameters導致不能使用。
先匯入neo4j-jdbc-driver-x.x.x.jar驅動包到專案,同時注意後續類都使用這個包裡面的類(即org.neo4j.driver開頭的類)
註釋掉的部分是 官網demo點選開啟連結的部分內容。