# Makefile for Java JDBC interface
#
# IDENTIFICATION
-# $Id: Makefile,v 1.20 2000/05/03 15:58:08 peter Exp $
+# $Id: Makefile,v 1.21 2000/05/05 07:35:29 peter Exp $
#
#-------------------------------------------------------------------------
@echo
@echo ------------------------------------------------------------
@echo To build the examples, type:
- @echo " make examples"
+ @echo "JDBC1: make examples"
+ @echo "JDBC2: make examples2"
@echo
@echo "To build the CORBA example (requires Java2):"
@echo " make corba"
+ @echo
+ @echo "To make the tests, type:"
+ @echo " make tests"
@echo ------------------------------------------------------------
@echo
#######################################################################
# These classes are in the example directory, and form the examples
EX= example/basic.class \
- example/blobtest.class \
- example/datestyle.class \
example/psql.class \
- example/ImageViewer.class \
- example/metadata.class \
+ example/ImageViewer.class
+
+# These are only valid for JDBC2
+EX2= example/blobtest.class
+
+# These are really test classes not true examples
+TESTS= example/metadata.class \
example/threadsafe.class
+
+# Non functional/obsolete examples
+# example/datestyle.class \
# example/Objects.class
# This rule builds the examples
@echo
@echo For instructions on how to use them, simply run them. For example:
@echo
- @echo " java example.blobtest"
+ @echo " java example.basic"
@echo
@echo This would display instructions on how to run the example.
@echo ------------------------------------------------------------
@echo Available examples:
@echo
@echo " example.basic Basic JDBC useage"
- @echo " example.blobtest Binary Large Object tests"
@echo " example.datestyle Shows how datestyles are handled"
@echo " example.ImageViewer Example application storing images"
@echo " example.psql Simple java implementation of psql"
- @echo " example.Objects Demonstrates Object Serialisation"
@echo " "
- @echo These are not really examples, but tests various parts of the driver
+ @echo ------------------------------------------------------------
+ @echo
+
+examples2: $(EX2) examples
+ @echo "The following JDBC2 only examples have also been built:"
+ @echo
+ @echo " example.blobtest Binary Large Object tests"
+ @echo
+ @echo ------------------------------------------------------------
+ @echo
+
+tests: $(TESTS)
+ @echo ------------------------------------------------------------
+ @echo The following tests have been built:
@echo " example.metadata Tests various metadata methods"
@echo " example.threadsafe Tests the driver's thread safety"
@echo ------------------------------------------------------------
Class.forName("org.postgresql.Driver");
// Connect to database
- System.out.println("Connecting to Database URL = " + url);
db = DriverManager.getConnection(url, user, password);
// Create a statement
stat = db.createStatement();
- // Set the connection to use transactions
- db.setAutoCommit(false);
-
// Also, get the LargeObjectManager for this connection
lom = ((org.postgresql.Connection)db).getLargeObjectAPI();
public void init()
{
try {
- db.setAutoCommit(true);
+ //db.setAutoCommit(true);
stat.executeUpdate("create table images (imgname name,imgoid oid)");
label.setText("Initialised database");
db.commit();
}
// This must run outside the previous try{} catch{} segment
- try {
- db.setAutoCommit(true);
- } catch(SQLException ex) {
- label.setText(ex.toString());
- }
+ //try {
+ //db.setAutoCommit(true);
+ //} catch(SQLException ex) {
+ //label.setText(ex.toString());
+ //}
}
/**
// fetch the large object manager
LargeObjectManager lom = ((org.postgresql.Connection)db).getLargeObjectAPI();
- System.out.println("Importing file");
+ db.setAutoCommit(false);
+
// A temporary buffer - this can be as large as you like
byte buf[] = new byte[2048];
// Open the file
- System.out.println("Opening file "+dir+"/"+name);
FileInputStream fis = new FileInputStream(new File(dir,name));
- // Gain access to large objects
- System.out.println("Gaining LOAPI");
-
// Now create the large object
- System.out.println("creating blob");
int oid = lom.create();
-
- System.out.println("Opening "+oid);
LargeObject blob = lom.open(oid);
// Now copy the file into the object.
//
// Note: we dont use write(buf), as the last block is rarely the same
// size as our buffer, so we have to use the amount read.
- System.out.println("Importing file");
int s,t=0;
while((s=fis.read(buf,0,buf.length))>0) {
- System.out.println("Block s="+s+" t="+t);t+=s;
+ t+=s;
blob.write(buf,0,s);
}
// Close the object
- System.out.println("Closing blob");
blob.close();
// Now store the entry into the table
stat = db.createStatement();
stat.executeUpdate("insert into images values ('"+name+"',"+oid+")");
db.commit();
+ db.setAutoCommit(false);
// Finally refresh the names list, and display the current image
ImageViewer.this.refreshList();
public void removeImage()
{
try {
+ //
// Delete any large objects for the current name
+ //
+ // Note: We don't need to worry about being in a transaction
+ // here, because we are not opening any blobs, only deleting
+ // them
+ //
ResultSet rs = stat.executeQuery("select imgoid from images where imgname='"+currentImage+"'");
if(rs!=null) {
// Even though there should only be one image, we still have to
// cycle through the ResultSet
while(rs.next()) {
- System.out.println("Got oid "+rs.getInt(1));
lom.delete(rs.getInt(1));
- System.out.println("Import complete");
}
}
rs.close();
// Finally delete any entries for that name
stat.executeUpdate("delete from images where imgname='"+currentImage+"'");
- db.commit();
label.setText(currentImage+" deleted");
currentImage=null;
- db.commit();
refreshList();
} catch(SQLException ex) {
label.setText(ex.toString());
public void displayImage(String name)
{
try {
- System.out.println("Selecting oid for "+name);
+ //
+ // Now as we are opening and reading a large object we must
+ // turn on Transactions. This includes the ResultSet.getBytes()
+ // method when it's used on a field of type oid!
+ //
+ db.setAutoCommit(false);
+
ResultSet rs = stat.executeQuery("select imgoid from images where imgname='"+name+"'");
if(rs!=null) {
// Even though there should only be one image, we still have to
// cycle through the ResultSet
while(rs.next()) {
- System.out.println("Got oid "+rs.getInt(1));
canvas.setImage(canvas.getToolkit().createImage(rs.getBytes(1)));
- System.out.println("Import complete");
label.setText(currentImage = name);
}
}
rs.close();
} catch(SQLException ex) {
label.setText(ex.toString());
+ } finally {
+ try {
+ db.setAutoCommit(true);
+ } catch(SQLException ex2) {
+ }
}
}
frame.setLayout(new BorderLayout());
ImageViewer viewer = new ImageViewer(frame,args[0],args[1],args[2]);
frame.pack();
+ frame.setLocation(0,50);
frame.setVisible(true);
} catch(Exception ex) {
System.err.println("Exception caught.\n"+ex);