关于数据库有三个地方需要注意:
1.plugin.xml数据库及其版本的相关配置
2.系统自带表 ofVersion表中,关于插件数据库的版本记录
3.database下相关sql文件(对应表的创建或更新),并向ofVersion中插一条字段(记录插件数据库版本)。
首先说下个人对 OpenFire 插件数据库加载的理解: (
只要会用的话,不需要看此。或者看完数据库的创建步骤知道怎么回事,再来看这里的理解也行)
1) plugin.xml 中配置数据库(及其版本),知道要需要哪个版本之后,
2) ofVersion 查询相关插件字段 的 version 值
a) 发现没有该插件 字段,去执行 sql (创建表) .
b) 如果有字段,看 version 的值( int 类型, 1 2 3 等)。需要版本比字段值高,更新数据库。需要版本比 version 值低,不更新。 版本号一定是 Int 类型 。
3) 在更新数据库的同时需要更新自己升级的表,还要修改 ofversion 这个表。
Sql文件
结构 插件根目录/src/database/ sql文件
Sql文件命名: 插件名_数据库.sql
# $Revision$ # $Date$ INSERT INTO ofVersion (name, version) VALUES ('myplugin',0); CREATE TABLE ofMypluginTest ( id int(11) NOT NULL, username varchar(30) DEFAULT NULL, password varchar(30) DEFAULT NULL, PRIMARY KEY (id) );
一定要往 ofVersion 表中 插入你插件数据库 版本记录。有了这条记录, OpenFire 再去加载这个插件的时候,发现 ofVersion 有这个插件 记录,就不会再在去执行 sql 语句
plugin.xml 中加两行
关于 database 的配置。下面代码的最后两行即可。
<version>1.0.0.1</version> <date>24/11/2013</date> <url>http://localhost:9090/openfire/plugins.jsp</url> <minServerVersion>3.4.1</minServerVersion> <licenseType>gpl</licenseType> <databaseKey>myplugin</databaseKey> <databaseVersion>0</databaseVersion>
启动 OpenFire ,加载插件,就显示数据库更新成功
数据库更新
首先更新sql文件,不修改。添加即可
方法:插件根目录/src/database/upgrade/1/插件sql或database /upgrade/2/插件sql
例如:plugins/myplugin/src/database/upgrade/1/myplugin_mysql.sql
示例 Slq 文件:
-- $Revision$ -- $Date$ ALTER TABLE ofMypluginTest ADD COLUMN age int(2) NULL; ALTER TABLE ofMypluginTest ADD COLUMN address VARCHAR(255) NULL; -- Update database version UPDATE ofVersion SET version = 1 WHERE name = 'myplugin';
注意: 更新语句,尽量先更新表,再更新 ofVersion 中 version 字段的值。
万一你写的 sql 有问题,只更新了 version 值变成了新版本,表更新失败,再去加载插件时候,就不会再执行 sql. 创建表。
大致分析一下版本不对应的情况
(开发者尽量使版本对应)
由于情况较多,直接举例说明了
myplugin插件 plugin.xml要用版本 0,ofVersion表中,没有myplugin 0这条自动。执行sql,创建表,插入一条数据。(假如没有sql文件,数据库更新失败)
plugin.xml要用版本2,version字段为1,执行database/2/ sql文件。如果没有2这个文件夹和相应sql,显示数据库更新成功。(其实没有更新数据库)