最後に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インジェクションの攻撃に特に注意しなければなりません。
|