提交 57f5baac authored 作者: Thomas Mueller's avatar Thomas Mueller

The TriggerPassData example now uses a prefix for the database name.

上级 9ed3dbeb
...@@ -8,18 +8,22 @@ package org.h2.samples; ...@@ -8,18 +8,22 @@ package org.h2.samples;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.h2.api.Trigger; import org.h2.api.Trigger;
/** /**
* This sample application shows how to pass data to a trigger. * This sample application shows how to pass data to a trigger. Trigger data can
* be persisted by storing it in the database.
*/ */
public class TriggerPassData implements Trigger { public class TriggerPassData implements Trigger {
private static final Map<String, TriggerPassData> TRIGGERS = private static final Map<String, TriggerPassData> TRIGGERS =
new HashMap<String, TriggerPassData>(); Collections.synchronizedMap(new HashMap<String, TriggerPassData>());
private String triggerData; private String triggerData;
/** /**
...@@ -31,7 +35,7 @@ public class TriggerPassData implements Trigger { ...@@ -31,7 +35,7 @@ public class TriggerPassData implements Trigger {
public static void main(String... args) throws Exception { public static void main(String... args) throws Exception {
Class.forName("org.h2.Driver"); Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection( Connection conn = DriverManager.getConnection(
"jdbc:h2:mem:", "sa", ""); "jdbc:h2:mem:test", "sa", "");
Statement stat = conn.createStatement(); Statement stat = conn.createStatement();
stat.execute("CREATE TABLE TEST(ID INT)"); stat.execute("CREATE TABLE TEST(ID INT)");
stat.execute("CREATE ALIAS TRIGGER_SET FOR \"" + stat.execute("CREATE ALIAS TRIGGER_SET FOR \"" +
...@@ -50,8 +54,9 @@ public class TriggerPassData implements Trigger { ...@@ -50,8 +54,9 @@ public class TriggerPassData implements Trigger {
public void init(Connection conn, String schemaName, public void init(Connection conn, String schemaName,
String triggerName, String tableName, boolean before, String triggerName, String tableName, boolean before,
int type) { int type) throws SQLException {
TRIGGERS.put(triggerName, this); System.out.println(getPrefix(conn) + triggerName);
TRIGGERS.put(getPrefix(conn) + triggerName, this);
} }
public void fire(Connection conn, Object[] old, Object[] row) { public void fire(Connection conn, Object[] old, Object[] row) {
...@@ -69,11 +74,19 @@ public class TriggerPassData implements Trigger { ...@@ -69,11 +74,19 @@ public class TriggerPassData implements Trigger {
/** /**
* Call this method to change a specific trigger. * Call this method to change a specific trigger.
* *
* @param conn the connection
* @param trigger the trigger name * @param trigger the trigger name
* @param data the data * @param data the data
*/ */
public static void setTriggerData(String trigger, String data) { public static void setTriggerData(Connection conn, String trigger, String data) throws SQLException {
TRIGGERS.get(trigger).triggerData = data; TRIGGERS.get(getPrefix(conn) + trigger).triggerData = data;
}
private static String getPrefix(Connection conn) throws SQLException {
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("call ifnull(database_path() || '_', '') || database() || '_'");
rs.next();
return rs.getString(1);
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论