Manually Processing A Query

Rather than importing data directly from a database, most Corda Server™ developers write custom Web applications that query the database, process the results, and output the resulting data set in ITXML or PCScript.

Doing this lets you see the data set before sending it to Corda Server to, for example, use if-then logic to analyze data values and apply annotations or drilldown effects dynamically; or perform statistical operations that would be difficult or impossible to set up in a database query.

This section discusses the following topics:

Streaming Data Directly to Corda Server

It is possible to stream tab-delimited, CSV, XML, and HTML data through Corda® Embedder, instead of loading it from a data file. For example, if an ASP or JSP queries a database and builds a string of CSV formatted data, you can send this data directly to Corda Server via the Corda Embedder, all in the same Web page.

To do this, use the setData() (for graphs) or setMapData() (for maps) Corda Embedder methods. These methods are very similar to the loadData() and loadMapData() methods, the main difference being that they accept a string of data instead of the location of a data file. For more information about the loadData methods, see Importing with Corda Embedder.

Streaming graph data with setData looks something like the following:

myImage.setData("graph",",Arrivals,Departures,Unused,Out of Commission\nAtlanta,23,36,11,7\nBoston,41,17,25,9");

Streaming map data with setMapData looks something like the following:

myImage.setMapData("AU","Points",",Arrivals\nAdelaide,23\nBrisbane,78\nCanberra,1\nDarwin,55\nHobart,25\nMelbourne,71\nPerth,9\nSydney,52");

Note: The \n is used to denote an end-of-line.

ITXML

To build ITXML from a data set obtained via an SQL query, use Corda Embedder code segments similar to those below.

Building a Graph ITXML String From an SQL Query

Class.forName("org.gjt.mm.mysql.Driver");

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/CordaSamples","","");

java.sql.Statement statement = connection.createStatement();

ResultSet rs = statement.executeQuery("SELECT y2002.city,y2002.teamname, y2000.wins, y2001.wins, y2002.wins FROM y2000, y2001, y2002 WHERE y2001.teamname = y2002.teamname AND y2001.teamname = y2000.teamname ORDER BY y2002.city");

 

String itxml = "<cit:bar-graph name="graph">

<cit:data>

<cit:column name="2000"/>

<cit:column name="2001"/>

<cit:column name="2002"/>

 

while (rs.next())

{

itxml += "<cit:row name=\"" + rs.getString("city") + " " + rs.getString("teamname") + "\">

<cit:cata-item value=\"" +rs.getString("y2000.wins") + "\"/>

<cit:cata-item value=\"" +rs.getString("y2001.wins") + "\"/>

<cit:cata-item value=\"" +rs.getString("y2002.wins") + "\"/> </cit:row>";

}

 

itxml += "</cit:data> </cit:bar-graph>";

myImage.addITXML(itxml);

Building a Map ITXML String From an SQL Query

Class.forName("org.gjt.mm.mysql.Driver");

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/CordaSamples","","");

java.sql.Statement statement = connection.createStatement();

ResultSet rs = statement.executeQuery("SELECT State, Population FROM uspop");

 

String itxml = "<cit:map name="US"> <cit:layer name="State"> ";

 

while (rs.next())

{

itxml += "<cit:map-shape name=\"" + rs.getString("state") + "\" + value=rs.getString("population") "\" </cit:map-shape>";>

}

 

itxml += "</cit:layer> </cit:map>";

myImage.addITXML(itxml);

PCScript

To build ITXML from a data set obtained via an SQL query, use Corda Embedder code segments similar to those below.

Building a Graph PCScript String From an SQL Query

Class.forName("org.gjt.mm.mysql.Driver");

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/CordaSamples","","");

java.sql.Statement statement = connection.createStatement();

ResultSet rs = statement.executeQuery("SELECT y2002.city,y2002.teamname, y2000.wins, y2001.wins, y2002.wins FROM y2000, y2001, y2002 WHERE y2001.teamname = y2002.teamname AND y2001.teamname = y2000.teamname ORDER BY y2002.city");

 

myImage.pcScript += "graph.setCategories(2000;2001;2002)";

while (rs.next()) {

myImage.pcScript += "graph.setSeries(" + rs.getString("city") + " " + rs.getString("teamname") + ";" + rs.getString("y2000.wins") + ";" + rs.getString("y2001.wins") + ";" + rs.getString("y2002.wins") + ")";

 

Building a Map PCScript String From an SQL Query

Class.forName("org.gjt.mm.mysql.Driver");

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/CordaSamples","","");

java.sql.Statement statement = connection.createStatement();

ResultSet rs = statement.executeQuery("SELECT y2002.city,y2002.teamname, y2000.wins, y2001.wins, y2002.wins FROM y2000, y2001, y2002 WHERE y2001.teamname = y2002.teamname AND y2001.teamname = y2000.teamname ORDER BY y2002.city");

 

ResultSet rs = statement.executeQuery("SELECT State, Population FROM uspop");

 

myImage.pcScript += "US.setValues(";

 

while (rs.next()) {

myImage.pcScript += rs.getString("State") + ", " + rs.getString("Population") + ";";

}

 

myImage.pcScript += ")";

Note: Do not use += to append to a String in Java* when appending a lot of data. Use a StringBuffer instead.