/**
* A demonstation of using triggers in a database application.
*/
import java.sql.*;
import com.mckoi.database.jdbc.MckoiConnection;
import com.mckoi.database.jdbc.TriggerListener;
public class TriggerDemo {
public static void main(String[] args) {
System.out.println();
// Register the Mckoi JDBC Driver
try {
Class.forName("com.mckoi.JDBCDriver").newInstance();
}
catch (Exception e) {
System.out.println(
"Unable to register the JDBC Driver.\n" +
"Make sure the classpath is correct.\n" +
"For example on Win32; java -cp ../../mkoidb.jar;. TriggerDemo\n" +
"On Unix; java -cp ../../mckoidb.jar:. TriggerDemo");
return;
}
// This URL specifies we are creating a local database. The
// configuration file for the database is found at './ExampleDB.conf'
// The 'create=true' argument means we want to create the database. If
// the database already exists, it can not be created.
String url = "jdbc:mckoi:local://ExampleDB.conf?create=true";
// The username/password for the database. This will be the username/
// password for the user that has full control over the database.
// ( Don't use this demo username/password in your application! )
String username = "user";
String password = "pass1212";
// Make a connection with the database. This will create the database
// and log into the newly created database.
Connection connection;
try {
connection = DriverManager.getConnection(url, username, password);
}
catch (SQLException e) {
System.out.println(
"Unable to create the database.\n" +
"The reason: " + e.getMessage());
return;
}
// --- Wrap the java.sql.Connection object around the Mckoi connection
// extention. ---
MckoiConnection mckoi_connection = new MckoiConnection(connection);
try {
// Create a Statement object to execute the queries on,
Statement statement = connection.createStatement();
ResultSet result;
System.out.println("-- Creating Tables --");
// Create two tables to test triggers,
statement.executeQuery(
" CREATE TABLE TriggerTable1 ( " +
" trig_column INTEGER NOT NULL ) ");
statement.executeQuery(
" CREATE TABLE TriggerTable2 ( " +
" trig_column INTEGER NOT NULL ) ");
System.out.println("-- Setting Triggers --");
// Set the triggers on the database,
statement.executeQuery("CREATE CALLBACK TRIGGER trig_1 INSERT ON TriggerTable1");
statement.executeQuery("CREATE CALLBACK TRIGGER trig_2 DELETE ON TriggerTable1");
statement.executeQuery("CREATE CALLBACK TRIGGER trig_3 UPDATE ON TriggerTable2");
// Set up listeners to listen for trigger events on the JDBC client,
mckoi_connection.addTriggerListener("trig_1", new TriggerListener() {
public void triggerFired(String trigger_name) {
System.out.println("Trigger fired: " + trigger_name);
}
});
mckoi_connection.addTriggerListener("trig_2", new TriggerListener() {
public void triggerFired(String trigger_name) {
System.out.println("Trigger fired: " + trigger_name);
}
});
mckoi_connection.addTriggerListener("trig_3", new TriggerListener() {
public void triggerFired(String trigger_name) {
System.out.println("Trigger fired: " + trigger_name);
}
});
System.out.println("-- Performing queries to cause triggers --");
// Perform some queries to fire the triggers.
statement.executeQuery(
" INSERT INTO TriggerTable1 ( trig_column ) VALUES " +
" ( 10 ), ( 15 ), ( 20 ) ");
statement.executeQuery(
" INSERT INTO TriggerTable2 ( trig_column ) VALUES " +
" ( 10 ), ( 15 ), ( 20 ) ");
statement.executeQuery(
" DELETE FROM TriggerTable1 WHERE trig_column = 10 ");
statement.executeQuery(
" DELETE FROM TriggerTable2 WHERE trig_column = 20 ");
statement.executeQuery(
" INSERT INTO TriggerTable1 ( trig_column ) " +
" SELECT trig_column FROM TriggerTable1 ");
statement.executeQuery(
" INSERT INTO TriggerTable2 ( trig_column ) " +
" SELECT trig_column FROM TriggerTable2 ");
statement.executeQuery(
" UPDATE TriggerTable1 SET trig_column = trig_column * 12.3 ");
statement.executeQuery(
" UPDATE TriggerTable2 SET trig_column = trig_column * 12.3 ");
// Wait 2 seconds for the triggers to fire....
System.out.println("--- Waiting for triggers ---");
try {
Thread.sleep(2000);
}
catch (InterruptedException e) { /* ignore */ }
System.out.println("--- Complete ---");
// Close the statement and the connection.
statement.close();
connection.close();
}
catch (SQLException e) {
System.out.println(
"An error occured\n" +
"The SQLException message is: " + e.getMessage());
}
// Close the the connection.
try {
connection.close();
}
catch (SQLException e2) {
e2.printStackTrace(System.err);
}
}
}