最後にqueryExec()メソッドです。このメソッドは主にトランザクション処理を行うために使用されます。リスト7に掲載した例を見てください。
リスト7
BEGIN TRANSACTION;
CREATE TABLE tblresources(
id INTEGER PRIMARY KEY,
url VARCHAR(255) NOT NULL UNIQUE default '',
email VARCHAR(70) NOT NULL default '',
precedingcopy VARCHAR(100) NOT NULL default '',
linktext VARCHAR(255) NOT NULL default '',
followingcopy VARCHAR(255) NOT NULL default '',
target VARCHAR(35) default '_blank',
category VARCHAR(100) NOT NULL default '',
theirlinkpage VARCHAR(100) default NULL,
whenaltered TIMESTAMP default '0000-00-00',
reviewed BOOLEAN default 0,
whenadded DATE default '2005-01-01');
CREATE INDEX tblresources_linktext_idx
ON tblresources(linktext);
INSERT INTO tblresources
VALUES(1,'http://php.net','','','php.net','- the source',
'','Software','','2005-10-20 17:27:07',1,'2005-10-20');
INSERT INTO tblresources
VALUES(2,'http://sqlite.org','','','SQLite','','','','',
'2005-10-20 17:27:07',1,'2005-10-20');
INSERT INTO tblresources
VALUES(3,'http://phparchitect.com/','','','php|architect',
'','','Miscellaneous','http://','2005-10-20 20:50:23',1,
'2005-10-20');
INSERT INTO tblresources
VALUES(4,'http://www.phpkitchen.com/index.php','','',
'phpkitchen','- come see what''s cooking','_blank','',
'http://','2005-10-20 17:27:07',1,'2005-10-20');
CREATE VIEW alphabet AS
SELECT DISTINCT UPPER(SUBSTR(linktext,1,1)) AS letter
FROM tblresources
WHERE reviewed = 1 ORDER BY letter;
CREATE VIEW specific_link AS
SELECT id, url,
(precedingcopy || ' ' || linktext || ' '
|| followingcopy)
AS copy
FROM tblresources;
CREATE TRIGGER delete_link
INSTEAD OF DELETE ON specific_link
FOR EACH ROW
BEGIN
DELETE FROM tblresources
WHERE id = old.id;
END;
CREATE TRIGGER insert_resources
AFTER INSERT ON tblresources
BEGIN
UPDATE tblresources
SET whenaltered = DATETIME('NOW','LOCALTIME')
WHERE id = new.id;
END;
CREATE TRIGGER update_resources
AFTER UPDATE ON tblresources
BEGIN
UPDATE tblresources
SET whenaltered = DATETIME('NOW','LOCALTIME')
WHERE id = new.id;
END;
CREATE TRIGGER add_date AFTER INSERT ON tblresources
BEGIN
UPDATE tblresources
SET whenadded = DATE('NOW','LOCALTIME')
WHERE id = new.id;
END;
COMMIT;
ここではデータベースのダンプがトランザクションとして記述されています。これを文字列としてqueryExec()メソッドに渡せばダンプデータを取得できるので、データベースをいつでも作成できるようになります。マルチプルクエリを実行するこの機能はセキュリティ上の問題を発生させてしまいます。
もしこのメソッドを使用するのであれば、SQLインジェクションの攻撃に特に注意しなければなりません。
|