Hi
Here is my simple example of reading database exchange table and extracting Blob detail field, converting to Fudge Message format and reading values.
import java.io.ByteArrayInputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.fudgemsg.FudgeContext;
import com.opengamma.master.exchange.ManageableExchange;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
public class Main {
private static Connection conn;
private static Blob blob;
private Statement st;
private static ResultSet rs;
private static Main db;
private static ManageableExchange exchange;
protected final FudgeContext FUDGE_CONTEXT;
public Main(String db_file_name_prefix) {
FUDGE_CONTEXT = OpenGammaFudgeContext.getInstance();
try {
conn = DriverManager.getConnection(“jdbc:hsqldb:” + db_file_name_prefix, “OpenGamma”, “OpenGamma”);
} catch (SQLException e) {
// e.printStackTrace();
}
}
public synchronized void query(String expression) {
try {
st = conn.createStatement();
} catch (SQLException e) {
// e.printStackTrace();
}
try {
rs = st.executeQuery(expression);
} catch (SQLException e) {
//e.printStackTrace();
}
try {
while (rs.next()) {
blob = rs.getBlob("DETAIL");
byte[] bdata = new byte[0];
try {
bdata = blob.getBytes(1, (int) blob.length());
} catch (SQLException e) {
e.printStackTrace();
}
exchange = FUDGE_CONTEXT.readObject(ManageableExchange.class, new ByteArrayInputStream(bdata));
System.out.println();
System.out.println("-----------------------------------------");
System.out.println("Detail bean : " + exchange.detail().bean());
System.out.println("Exchange Name: " + exchange.getName());
System.out.println("ISOMic: " + exchange.getISOMic());
System.out.println("External Id Bundle: " + exchange.getExternalIdBundle());
System.out.println("Region Id Bundle: " + exchange.getRegionIdBundle());
System.out.println("Time Zone: " + exchange.getTimeZone());
System.out.println("Detail: " + exchange.detail());
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
db = new Main("/home/cme_user/OG-Platform/examples/examples-simulated/data/masterdb/hsqldb/example-db");
System.out.println("Database Accessed Successfully");
} catch (Exception ex1) {
//ex1.printStackTrace();
System.out.println("Database Accessed Failed");
}
db.query("SELECT * FROM PUBLIC.EXG_EXCHANGE");
System.out.println("Queried Table Successful");
try {
conn.close();
} catch (SQLException e) {
// e.printStackTrace();
}
}
}
I have the following exception errors at end of output, any idea how to solve? or better solutions?
Detail bean : ManageableExchange{uniqueId=DbExg~1000~0, externalIdBundle=Bundle[ISO_MIC~XLON], name=London Stock Exchange, regionIdBundle=Bundle[ISO_COUNTRY_ALPHA2~GB], timeZone=Europe/London, detail=[]}
Exchange Name: London Stock Exchange
ISOMic: XLON
External Id Bundle: Bundle[ISO_MIC~XLON]
Region Id Bundle: Bundle[ISO_COUNTRY_ALPHA2~GB]
Time Zone: Europe/London
Detail: ManageableExchange:detail=[]
Detail bean : ManageableExchange{uniqueId=DbExg~1001~0, externalIdBundle=Bundle[ISO_MIC~XNYS], name=New York Stock Exchange, regionIdBundle=Bundle[ISO_COUNTRY_ALPHA2~US], timeZone=America/New_York, detail=[]}
Exchange Name: New York Stock Exchange
ISOMic: XNYS
External Id Bundle: Bundle[ISO_MIC~XNYS]
Region Id Bundle: Bundle[ISO_COUNTRY_ALPHA2~US]
Time Zone: America/New_York
Detail: ManageableExchange:detail=[]
Exception in thread “main” org.fudgemsg.wire.FudgeRuntimeIOException
at org.fudgemsg.wire.FudgeDataInputStreamReader.next(FudgeDataInputStreamReader.java:199)
at org.fudgemsg.wire.FudgeMsgReader.readMessageEnvelope(FudgeMsgReader.java:170)
at org.fudgemsg.wire.FudgeMsgReader.nextMessageEnvelope(FudgeMsgReader.java:149)
at org.fudgemsg.wire.FudgeMsgReader.nextMessage(FudgeMsgReader.java:134)
at org.fudgemsg.mapping.FudgeObjectReader.read(FudgeObjectReader.java:121)
at org.fudgemsg.FudgeContext.readObject(FudgeContext.java:446)
at com.opengamma.examples.bloomberg.server.Main.showQuery(Main.java:60)
at com.opengamma.examples.bloomberg.server.Main.query(Main.java:46)
at com.opengamma.examples.bloomberg.server.Main.main(Main.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.io.EOFException
at java.io.DataInputStream.readShort(DataInputStream.java:315)
at org.fudgemsg.wire.FudgeDataInputStreamReader.consumeMessageEnvelope(FudgeDataInputStreamReader.java:384)
at org.fudgemsg.wire.FudgeDataInputStreamReader.next(FudgeDataInputStreamReader.java:185)
… 13 more