公众的 班 缓存JdbcPersonStore 延伸 CacheStoreAdapter(缓存存储适配器)<长, 人> {
//只要在IgniteCache上调用“get(…)”方法,就会调用此方法。
@覆盖
公众的 人 负载(长 钥匙) {
尝试 (连接 康纳 = 连接()) {
尝试 (已编制报表 标准 = 康纳.编制报表(“从id=?的个人中选择*”)) {
标准.设置长(1, 钥匙);
结果集 秒 = 标准.执行查询();
返回 秒.下一个() ? 新的 人(秒.获取Int(1), 秒.获取字符串(2)) : 无效的;
}
} 抓住 (SQL异常 e(电子)) {
扔 新的 CacheLoader异常(“加载失败:” + 钥匙, e(电子));
}
}
@覆盖
公众的 空隙 写(条目<? 延伸 长, ? 延伸 人> 进入) 投掷 缓存写入程序异常 {
尝试 (连接 康纳 = 连接()) {
//MERGE语句的语法是特定于数据库的,应该用于您的数据库。
//如果您的数据库不支持MERGE语句,则按顺序使用
//更新,插入语句。
尝试 (已编制报表 标准 = 康纳.编制报表(“合并到PERSON(id,name)key(id)VALUES(?,?)”)) {
人 val值 = 进入.获取价值();
标准.setLong(设置长)(1, 进入.获取密钥());
标准.setString(设置字符串)(2, val值.获取名称());
标准.执行更新();
}
} 抓住 (SQL异常 e(电子)) {
扔 新的 缓存写入程序异常(“写入条目失败(” + 进入 + ")", e(电子));
}
}
//只要在IgniteCache上调用“remove(…)”方法,就会调用此方法。
@覆盖
公众的 空隙 删除(对象 钥匙) {
尝试 (连接 康纳 = 连接()) {
尝试 (已编制报表 标准 = 康纳.编制报表(“从PERSON中删除,其中id=?”)) {
标准.setLong(设置长)(1, (长) 钥匙);
标准.执行更新();
}
} 抓住 (SQL异常 e(电子)) {
扔 新的 缓存写入程序异常(“删除失败:” + 钥匙, e(电子));
}
}
//每当“loadCache()”和“localLoadCache
//方法在IgniteCache上调用。它用于批量加载缓存。
//如果不需要大量加载缓存,请跳过此方法。
@覆盖
公众的 空隙 loadCache(加载缓存)(点火BiInClosure<长, 人> clo(克隆), 对象... 参数) {
如果 (参数 == 无效的 || 参数.长度 == 0 || 参数[0] == 无效的)
扔 新的 CacheLoader异常(“未提供预期的条目计数参数。”);
最终的 整数 入口Cnt = (整数) 参数[0];
尝试 (连接 康纳 = 连接()) {
尝试 (已编制报表 标准 = 康纳.编制报表(“从个人中选择*”)) {
尝试 (结果集 秒 = 标准.执行查询()) {
整数 碳纳米管 = 0;
虽然 (碳纳米管 < 入口Cnt && 秒.下一个()) {
人 人 = 新的 人(秒.获取Int(1), 秒.获取字符串(2));
clo(克隆).应用(人.获取Id(), 人);
碳纳米管++;
}
}
}
} 抓住 (SQL异常 e(电子)) {
扔 新的 CacheLoader异常(“无法从缓存存储加载值。”, e(电子));
}
}
//打开JDBC连接。
私有的 连接 连接() 投掷 SQL异常 {
//打开与RDBMS系统的连接(Oracle、MySQL、Postgres、DB2、Microsoft SQL等)
连接 连接器 = 驱动管理器.获取连接(“jdbc:mysql://[host]:[port]/[database]”, “您的用户名”, “您的密码”);
康纳.设置自动提交(真的);
返回 康纳;
}
}