import java.io.*;
import java.sql.*;
import java.text.*;
/** object wrapper for the database.
* @author anders
*
* basically just isolates all the database specific code so we could,
* if we wanted to, change the entire database backend simply by
* changing this one class.
*/
public class DBWrapper {
Connection db = null; // The connection to the database
Statement st = null; // Our statement to run queries with
// PrintWriter out = res.getWriter();
String url = "jdbc:postgresql:network";
String usr = "anders";
String pwd = "foo";
/** default constructor.
* @author anders
*/
public DBWrapper(){
super();
}
/** establishes connection to database.
* @author anders
* @return true if connection established, false if problems
*/
public boolean connect(){
try {
// Load the driver
Class.forName("org.postgresql.Driver");
// Connect to database
db = DriverManager.getConnection(url, usr, pwd);
return true;
}
catch(ClassNotFoundException e) {
System.out.println("Couldn't load database driver: " + e.getMessage());
return false;
}
catch(SQLException e) {
System.out.println("SQLException caught: " + e.getMessage());
return false;
}
}
/** gets an xml formatted list of edge data.
* @author anders
* @return xml formatted list of edge data
*/
public String getEdgeList(){
String temp = "";
try {
st = db.createStatement();
ResultSet rs = st.executeQuery("select source,dest,weight,class from example");
while(rs.next()) {
String source = "" + rs.getString("source") + "";
String dest = "" + rs.getString("dest") + "";
String weight = rs.getString("weight");
weight = (weight == null)
? "50" : "" + weight + "";
String e_class = rs.getString("class");
e_class = (e_class == null)
? "default" : "" + e_class + "";
temp += "" + source + dest + weight + e_class + "\t";
}
}
catch(SQLException e) {
return "SQLException caught: " + e.getMessage();
}
return "" + temp + "";
}
/** gets a list of the node data.
* @author anders
* @return xml formatted list of node data
*/
public String getNodeList(){
String temp = "";
try {
st = db.createStatement();
ResultSet rs = st.executeQuery("select name,class from nodes");
while(rs.next()) {
String name = rs.getString("name");
String n_class = rs.getString("class");
temp += ""
+ name +
""
+ ""
+ n_class
+ "\t";
}
}
catch(SQLException e) {
return "" + e.getMessage() + "";
}
return "" + temp + "";
}
/** removes an edge from the database.
* @param source source of edge to remove
* @param dest destination of edge
* @param e_class class of edge (in case there are multiple edges between the same two nodes)
*/
public void removeEdge(String source, String dest, String e_class){
System.out.println("removing edge");
try {
st = db.createStatement();
String query = "delete from example where source='"
+ source + "' AND dest='" + dest + "' AND class='" + e_class + "'";
st.executeUpdate(query);
} catch(SQLException e) {
System.out.println("SQL error: " + e);
return;
}
}
/** adds an edge to the database.
* @param source source node of edge
* @param dest destination node of edge
* @param e_class class of edge
*/
public void addEdge(String source, String dest, String e_class){
try {
st = db.createStatement();
st.executeUpdate("insert into example (source,dest,class) VALUES ('"
+ source + "','"
+ dest + "','"
+ e_class + "')");
} catch(SQLException e) {
return;
}
}
/** adds a node to the database.
* @param name label of node
* @param n_class class of node
*/
public void addNode (String name, String n_class) {
try {
st = db.createStatement();
String query = "insert into nodes (name,class)"
+ " VALUES ('" + name + "','" + n_class + "')";
st.executeUpdate(query);
} catch (SQLException e) {
System.out.println("SQL exception: " + e);
return;
}
}
/** removes a node from the database.
* @param name name of node to remove.
*
* also removes any edges that were attached to the node.
*/
public void removeNode(String name){
try {
st = db.createStatement();
st.executeUpdate("delete from nodes where name='" +
name + "'");
st.executeUpdate("delete from example where source='" +
name + "'");
st.executeUpdate("delete from example where dest='" +
name + "'");
} catch (SQLException e){
return;
}
}
/** disconnects from the database.
* @author anders
*/
public void disconnect() {
try {
if (db != null) db.close();
}
catch (SQLException ignored) {}
}
}