KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > h2 > samples > TriggerSample


1 /*
2  * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
3  * Initial Developer: H2 Group
4  */

5 package org.h2.samples;
6
7 import java.math.BigDecimal JavaDoc;
8 import java.sql.Connection JavaDoc;
9 import java.sql.DriverManager JavaDoc;
10 import java.sql.PreparedStatement JavaDoc;
11 import java.sql.ResultSet JavaDoc;
12 import java.sql.SQLException JavaDoc;
13 import java.sql.Statement JavaDoc;
14
15 import org.h2.api.Trigger;
16
17 public class TriggerSample {
18
19     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
20         Class.forName("org.h2.Driver");
21         Connection JavaDoc conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", "");
22         Statement JavaDoc stat = conn.createStatement();
23         stat.execute("CREATE TABLE INVOICE(ID INT PRIMARY KEY, AMOUNT DECIMAL)");
24         stat.execute("CREATE TABLE INVOICE_SUM(AMOUNT DECIMAL)");
25         stat.execute("INSERT INTO INVOICE_SUM VALUES(0.0)");
26         stat.execute("CREATE TRIGGER INV_INS AFTER INSERT ON INVOICE FOR EACH ROW CALL \"org.h2.samples.TriggerSample$MyTrigger\" ");
27         stat.execute("CREATE TRIGGER INV_UPD AFTER UPDATE ON INVOICE FOR EACH ROW CALL \"org.h2.samples.TriggerSample$MyTrigger\" ");
28         stat.execute("CREATE TRIGGER INV_DEL AFTER DELETE ON INVOICE FOR EACH ROW CALL \"org.h2.samples.TriggerSample$MyTrigger\" ");
29
30         stat.execute("INSERT INTO INVOICE VALUES(1, 10.0)");
31         stat.execute("INSERT INTO INVOICE VALUES(2, 19.95)");
32         stat.execute("UPDATE INVOICE SET AMOUNT=20.0 WHERE ID=2");
33         stat.execute("DELETE FROM INVOICE WHERE ID=1");
34
35         ResultSet JavaDoc rs;
36         rs = stat.executeQuery("SELECT AMOUNT FROM INVOICE_SUM");
37         rs.next();
38         System.out.println("The sum is " + rs.getBigDecimal(1));
39         conn.close();
40     }
41
42     public static class MyTrigger implements Trigger {
43
44         public void init(Connection JavaDoc conn, String JavaDoc schemaName, String JavaDoc triggerName, String JavaDoc tableName) {
45             // System.out.println("Initializing trigger " + triggerName + " for table " + tableName);
46
}
47
48         public void fire(Connection JavaDoc conn,
49                 Object JavaDoc[] oldRow, Object JavaDoc[] newRow)
50                 throws SQLException JavaDoc {
51             BigDecimal JavaDoc diff = null;
52             if(newRow != null) {
53                 diff = (BigDecimal JavaDoc)newRow[1];
54             }
55             if(oldRow != null) {
56                 BigDecimal JavaDoc m = (BigDecimal JavaDoc)oldRow[1];
57                 diff = diff == null ? m.negate() : diff.subtract(m);
58             }
59             PreparedStatement JavaDoc prep = conn.prepareStatement(
60                     "UPDATE INVOICE_SUM SET AMOUNT=AMOUNT+?");
61             prep.setBigDecimal(1, diff);
62             prep.execute();
63         }
64     }
65
66 }
67
Popular Tags