我要写一个插件,这个插件要用sqlite数据库储存玩家等级信息,假设我的主类叫Core.java
主类Core.java:
- package net.berry64.example;
- import net.berry64.libs64.sql.Lib64SQL;
- import org.bukkit.plugin.java.JavaPlugin;
- import java.io.File;
- public class Core extends JavaPlugin {
- Lib64SQL database; //这里是数据库
- @Override
- public void onEnable() {
- File databaseFile = new File(this.getDataFolder(), "database.db")); //把数据库文件位置设置成插件文件夹里的database.db文件
- database = Lib64SQL.createSQLite(databaseFile); //初始化数据库
- }
- }
复制代码
然后之后我们创建一个新的myPlayer类,来代表我们的数据库文件格式,我们让它继承net.berry64.libs64.sql.Model
(懂数据库的可以把这个想成表格框架)
myPlayer.java:
- import net.berry64.libs64.sql.DBData;
- import net.berry64.libs64.sql.DataType;
- import net.berry64.libs64.sql.Model;
- public class myPlayer extends Model {
- }
复制代码
然后我们写上数据库里需要储存的数据,以@DBData修饰, type为数据类型
避免原始数据类型(primitive data types)
比如不要用int, 用Integer, 不用double用Double - import net.berry64.libs64.sql.DBData;
- import net.berry64.libs64.sql.DataType;
- import net.berry64.libs64.sql.Model;
- public class mzPlayer extends Model {
- @DBData(PrimaryKey = true, NotNull = true, type = DataType.INT) //这里的PrimaryKey代表这个是SQL用来引索的数据,只能为数字类型
- public Integer playerID;
- @DBData(type = DataType.TEXT)
- public String name;
- @DBData(type = DataType.INT)
- public Integer level;
- }
复制代码
回到主类注册一下这个类: 不注册就尝试直接使用会报错
Core.java:
- package net.berry64.example;
- import net.berry64.libs64.sql.Lib64SQL;
- import org.bukkit.plugin.java.JavaPlugin;
- import java.io.File;
- public class Core extends JavaPlugin {
- Lib64SQL database;
- @Override
- public void onEnable() {
- File databaseFile = new File(this.getDataFolder(), "database.db"));
- database = Lib64SQL.createSQLite(databaseFile);
- database.register(myPlayer.class); //注册
- }
- }
复制代码
之后的所有操作都基本可以在java内以对象的形式操作了:
比如添加数据你就new 一个myPlayer, 并且给里面的变量附上值:
- myPlayer player = new myPlayer();
- player.name="DORK"; //实际你不应该这样直接改数据,用getter&setter
- player.level=9001;
- player.addTo(database); //这样数据就会添加到数据库里了
复制代码
那我们要怎么从数据库里读取数据呢?
这时候就要介绍自动补全系统了:
- myPlayer incompletePlayer = new myPlayer();
- incompletePlayer.level= 100; //注意这里我们只给了level变量赋值,也就是说这时候playerID与name为null
- List<myPlayer> completePlayers = database.fetchAll(incompletePlayer); //这里返回的就是所有符合level=100的数据,并转化成myPlayer实力
- for(myPlayer player : completePlayers){
- getLogger().info(player.name); //这里就会显示所有level为100的玩家名
- }
复制代码
- database.fetchOne(incompletePlayer);
复制代码 也是同理,不过它返回的只是第一个而不是所有
|