萌新第一次写插件,目标是一个Discuz积分转换iConomy的游戏币的,我先写了一个单体转换的命令,涉及4次连接mysql。初始化程序还没做,但是已经有思路了。
但是现在问题是每次都是在导出discuz积分到bal变量的时候就MysqlException跳出了,提示错误了
主文件代码如下:
现在是“正在导出你的论坛积分...”显示之后就Exception报错了,("[错误]:与数据库连接异常,请联系服主或技术OP!"),请问这个代码哪里有问题
这是config.yml:
复制代码
但是现在问题是每次都是在导出discuz积分到bal变量的时候就MysqlException跳出了,提示错误了
主文件代码如下:
package org.ucraft;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
/**
*
* @author S.N.Mendelev
*/
public class main extends JavaPlugin {
FileConfiguration config = getConfig();
int c=0;
public static void main(String[] ag)
{
}
@Override
public void onEnable(){
getServer().getPluginManager().registerEvents(new MyListener(), this);
config.addDefault("url", "jdbc:mysql://localhost:3306/ultrax");
config.addDefault("prefix", "pre");
config.addDefault("icotab", "iconomy");
config.addDefault("unm", "root");
config.addDefault("password", "root");
config.addDefault("extcredit", "2");
config.options().copyDefaults(true);
saveConfig();
getLogger().info("优快工作室荣誉出品 www.ucraft.org,唯一正版mcbbs账号:player927");
getLogger().info("DirectX积分对iConomy兑换插件已成功加载");
}
@Override
public void onDisable(){
getLogger().info("积分兑换插件已被卸载。");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("xu")){
sender.sendMessage("你的生命中的一秒已经转移给长者!");
c=c+1;
sender.sendMessage("从服务器启动至今,已经有"+String.valueOf(c)+"秒转移给长者");
return true;
}
if(cmd.getName().equalsIgnoreCase("dxico")){
if (args.length<1){
sender.sendMessage("错误:没有指定玩家");
sender.sendMessage("用法:/dxico <你的用户名>");
return false;
}
int uid=-1,row=1+config.getInt("extcredit"),bal=0;
try{
Class.forName("com.mysql.jdbc.Driver");
sender.sendMessage("成功加载MySQL驱动!");
}catch(ClassNotFoundException e1){
sender.sendMessage("找不到MySQL驱动!");
}
String url;
url = config.getString("url");
Connection conn;
try {
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmt = conn.createStatement();
sender.sendMessage("已连接到数据库,准备进行同步...");
sender.sendMessage("正在匹配你的用户名和uid...");
String sql = "select * from "+config.getString("prefix")+"_common_member";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()){
if(rs.getString(3) == null ? args[0] == null : rs.getString(3).equals(args[0])){
uid=rs.getInt(1);
break;
}
}
if(uid==-1){
sender.sendMessage("错误:未找到指定用户");
return false;
}
rs.close();
stmt.close();
conn.close();
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmta = conn.createStatement();
String sqln = "select * from "+config.getString("prefix")+"_common_member_count";
sender.sendMessage("正在导出你的论坛积分...");
ResultSet rs1 = stmta.executeQuery(sqln);
while (rs1.next()){
if(uid==rs1.getInt(1)){
bal=rs1.getInt(row);
break;
}
}
rs1.close();
stmta.close();
conn.close();
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmtb = conn.createStatement();
String sqlm = "select * from "+config.getString("icotab");
ResultSet rs2 = stmta.executeQuery(sqlm);
sender.sendMessage("正在将论坛积分导入游戏币...");
String sql2 = "update "+config.getString("icotab")+" set balance=? where username=?";
PreparedStatement pst = conn.prepareStatement(sql2);
pst.setString(1,String.valueOf(bal)+".00");
pst.setString(2,args[0]);
pst.executeUpdate();
rs2.close();
stmtb.close();
conn.close();
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmtc = conn.createStatement();
String sqlp = "select * from "+config.getString("prefix")+"_common_member_count";
ResultSet rs3 = stmta.executeQuery(sqlp);
sender.sendMessage("正在将游戏币回导至论坛积分...");
String sql3 = "update "+config.getString("prefix")+"_common_member_count set extcredits"+config.getInt("extcredit")+"=? where uid=?";
PreparedStatement pst1 = conn.prepareStatement(sql3);
pst1.setString(1,String.valueOf(bal));
pst1.setString(2,String.valueOf(uid));
pst1.executeUpdate();
rs3.close();
stmtc.close();
conn.close();
sender.sendMessage("转换完成!");
return true;
}catch(SQLException e){
sender.sendMessage("[错误]:与数据库连接异常,请联系服主或技术OP!");
return false;
}
}
return false;
}
}现在是“正在导出你的论坛积分...”显示之后就Exception报错了,("[错误]:与数据库连接异常,请联系服主或技术OP!"),请问这个代码哪里有问题
这是config.yml:
但是现在问题是每次都是在导出discuz积分到bal变量的时候就MysqlException跳出了,提示错误了
主文件代码如下:
package org.ucraft;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
/**
*
* @author S.N.Mendelev
*/
public class main extends JavaPlugin {
FileConfiguration config = getConfig();
int c=0;
public static void main(String[] ag)
{
}
@Override
public void onEnable(){
getServer().getPluginManager().registerEvents(new MyListener(), this);
config.addDefault("url", "jdbc:mysql://localhost:3306/ultrax");
config.addDefault("prefix", "pre");
config.addDefault("icotab", "iconomy");
config.addDefault("unm", "root");
config.addDefault("password", "root");
config.addDefault("extcredit", "2");
config.options().copyDefaults(true);
saveConfig();
getLogger().info("优快工作室荣誉出品 www.ucraft.org,唯一正版mcbbs账号:player927");
getLogger().info("DirectX积分对iConomy兑换插件已成功加载");
}
@Override
public void onDisable(){
getLogger().info("积分兑换插件已被卸载。");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("xu")){
sender.sendMessage("你的生命中的一秒已经转移给长者!");
c=c+1;
sender.sendMessage("从服务器启动至今,已经有"+String.valueOf(c)+"秒转移给长者");
return true;
}
if(cmd.getName().equalsIgnoreCase("dxico")){
if (args.length<1){
sender.sendMessage("错误:没有指定玩家");
sender.sendMessage("用法:/dxico <你的用户名>");
return false;
}
int uid=-1,row=1+config.getInt("extcredit"),bal=0;
try{
Class.forName("com.mysql.jdbc.Driver");
sender.sendMessage("成功加载MySQL驱动!");
}catch(ClassNotFoundException e1){
sender.sendMessage("找不到MySQL驱动!");
}
String url;
url = config.getString("url");
Connection conn;
try {
conn = DriverManager.getConnection(url, config.getString("unm"),config.getString("password"));
Statement stmt = conn.createStatement();
sender.sendMessage("已连接到数据库,准备进行同步...");
sender.sendMessage("正在匹配你的用户名和uid...");
String sql = "select * from "+config.getString("prefix")+"_common_member";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()){
if(rs.getString(3) == null ? args[0] == null : rs.getString(3).equals(args[0])){
uid=rs.getInt(1);
break;
}
}
if(uid==-1){
sender.sendMessage("错误:未找到指定用户");
return false;
}
rs.close();
stmt.close();
conn.close();
conn = DriverManager.getConnection(url, config.getString("unm"),config.getString("password"));
Statement stmta = conn.createStatement();
String sqln = "select * from "+config.getString("prefix")+"_common_member_count";
sender.sendMessage("正在导出你的论坛积分...");
ResultSet rs1 = stmta.executeQuery(sqln);
while (rs1.next()){
if(uid==rs1.getInt(1)){
bal=rs1.getInt(row);
break;
}
}
rs1.close();
stmta.close();
conn.close();
conn = DriverManager.getConnection(url, config.getString("unm"),config.getString("password"));
Statement stmtb = conn.createStatement();
String sqlm = "select * from "+config.getString("icotab");
ResultSet rs2 = stmta.executeQuery(sqlm);
sender.sendMessage("正在将论坛积分导入游戏币...");
String sql2 = "update "+config.getString("icotab")+" set balance=? where username=?";
PreparedStatement pst = conn.prepareStatement(sql2);
pst.setString(1,String.valueOf(bal)+".00");
pst.setString(2,args[0]);
pst.executeUpdate();
rs2.close();
stmtb.close();
conn.close();
conn = DriverManager.getConnection(url, config.getString("unm"),config.getString("password"));
Statement stmtc = conn.createStatement();
String sqlp = "select * from "+config.getString("prefix")+"_common_member_count";
ResultSet rs3 = stmta.executeQuery(sqlp);
sender.sendMessage("正在将游戏币回导至论坛积分...");
String sql3 = "update "+config.getString("prefix")+"_common_member_count set extcredits"+config.getInt("extcredit")+"=? where uid=?";
PreparedStatement pst1 = conn.prepareStatement(sql3);
pst1.setString(1,String.valueOf(bal));
pst1.setString(2,String.valueOf(uid));
pst1.executeUpdate();
rs3.close();
stmtc.close();
conn.close();
sender.sendMessage("转换完成!");
return true;
}catch(SQLException e){
sender.sendMessage("[错误]:与数据库连接异常,请联系服主或技术OP!");
return false;
}
}
return false;
}
}
这是config.yml:
- ## YAML Template.
- ---
- ##你数据库的地址,格式为:"jdbc:mysql://"+你数据库的IP地址+":"+端口号+"/"+数据库名称;
- ##默认IP为localhost(本机),端口号3306,数据库名称ultrax。
- url: jdbc:mysql://localhost:3306/ultrax
- ##你Discuz的数据表名称前缀,一般为pre,如果同一个数据库中运行了多个论坛,请修改
- prefix: pre
- ##你iconomy插件的表名称,默认是iconomy,参见iconomy的config.yml
- icotab: iconomy
- ##你MySQL数据库的用户名和密码
- unm: root
- password: root
- ##你discuz对应游戏币的积分编号,默认为2,extcredit几就是几
- extcredit: 2
2021.12 数据,可能有更多内容
萌新第一次写插件,目标是一个Discuz积分转换iConomy的游戏币的,我先写了一个单体转换的命令,涉及4次连接mysql。初始化程序还没做,但是已经有思路了。但是现在问题是每次都是在导出discuz积分到bal变量的时候就MysqlException跳出了,提示错误了
主文件代码如下:
package org.ucraft;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
/**
*
* @author S.N.Mendelev
*/
public class main extends JavaPlugin {
FileConfiguration config = getConfig();
int c=0;
public static void main(String[] ag)
{
}
@Override
public void onEnable(){
getServer().getPluginManager().registerEvents(new MyListener(), this);
config.addDefault("url", "jdbc:mysql://localhost:3306/ultrax");
config.addDefault("prefix", "pre");
config.addDefault("icotab", "iconomy");
config.addDefault("unm", "root");
config.addDefault("password", "root");
config.addDefault("extcredit", "2");
config.options().copyDefaults(true);
saveConfig();
getLogger().info("优快工作室荣誉出品 www.ucraft.org,唯一正版mcbbs账号:player927");
getLogger().info("DirectX积分对iConomy兑换插件已成功加载");
}
@Override
public void onDisable(){
getLogger().info("积分兑换插件已被卸载。");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("xu")){
sender.sendMessage("你的生命中的一秒已经转移给长者!");
c=c+1;
sender.sendMessage("从服务器启动至今,已经有"+String.valueOf(c)+"秒转移给长者");
return true;
}
if(cmd.getName().equalsIgnoreCase("dxico")){
if (args.length<1){
sender.sendMessage("错误:没有指定玩家");
sender.sendMessage("用法:/dxico <你的用户名>");
return false;
}
int uid=-1,row=1+config.getInt("extcredit"),bal=0;
try{
Class.forName("com.mysql.jdbc.Driver");
sender.sendMessage("成功加载MySQL驱动!");
}catch(ClassNotFoundException e1){
sender.sendMessage("找不到MySQL驱动!");
}
String url;
url = config.getString("url");
Connection conn;
try {
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmt = conn.createStatement();
sender.sendMessage("已连接到数据库,准备进行同步...");
sender.sendMessage("正在匹配你的用户名和uid...");
String sql = "select * from "+config.getString("prefix")+"_common_member";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()){
if(rs.getString(3) == null ? args[0] == null : rs.getString(3).equals(args[0])){
uid=rs.getInt(1);
break;
}
}
if(uid==-1){
sender.sendMessage("错误:未找到指定用户");
return false;
}
rs.close();
stmt.close();
conn.close();
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmta = conn.createStatement();
String sqln = "select * from "+config.getString("prefix")+"_common_member_count";
sender.sendMessage("正在导出你的论坛积分...");
ResultSet rs1 = stmta.executeQuery(sqln);
while (rs1.next()){
if(uid==rs1.getInt(1)){
bal=rs1.getInt(row);
break;
}
}
rs1.close();
stmta.close();
conn.close();
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmtb = conn.createStatement();
String sqlm = "select * from "+config.getString("icotab");
ResultSet rs2 = stmta.executeQuery(sqlm);
sender.sendMessage("正在将论坛积分导入游戏币...");
String sql2 = "update "+config.getString("icotab")+" set balance=? where username=?";
PreparedStatement pst = conn.prepareStatement(sql2);
pst.setString(1,String.valueOf(bal)+".00");
pst.setString(2,args[0]);
pst.executeUpdate();
rs2.close();
stmtb.close();
conn.close();
conn = DriverManager.getConnection(url,config.getString("unm"),config.getString("password"));
Statement stmtc = conn.createStatement();
String sqlp = "select * from "+config.getString("prefix")+"_common_member_count";
ResultSet rs3 = stmta.executeQuery(sqlp);
sender.sendMessage("正在将游戏币回导至论坛积分...");
String sql3 = "update "+config.getString("prefix")+"_common_member_count set extcredits"+config.getInt("extcredit")+"=? where uid=?";
PreparedStatement pst1 = conn.prepareStatement(sql3);
pst1.setString(1,String.valueOf(bal));
pst1.setString(2,String.valueOf(uid));
pst1.executeUpdate();
rs3.close();
stmtc.close();
conn.close();
sender.sendMessage("转换完成!");
return true;
}catch(SQLException e){
sender.sendMessage("[错误]:与数据库连接异常,请联系服主或技术OP!");
return false;
}
}
return false;
}
}现在是“正在导出你的论坛积分...”显示之后就Exception报错了,("[错误]:与数据库连接异常,请联系服主或技术OP!"),请问这个代码哪里有问题
这是config.yml:
代码:
- ## YAML Template.
- ---
- ##你数据库的地址,格式为:"jdbc:mysql://"+你数据库的IP地址+":"+端口号+"/"+数据库名称;
- ##默认IP为localhost(本机),端口号3306,数据库名称ultrax。
- url: jdbc:mysql://localhost:3306/ultrax
- ##你Discuz的数据表名称前缀,一般为pre,如果同一个数据库中运行了多个论坛,请修改
- prefix: pre
- ##你iconomy插件的表名称,默认是iconomy,参见iconomy的config.yml
- icotab: iconomy
- ##你MySQL数据库的用户名和密码
- unm: root
- password: root
- ##你discuz对应游戏币的积分编号,默认为2,extcredit几就是几
- extcredit: 2
本帖最后由 player927 于 2017-9-3 18:35 编辑
20查看0回复惨案,求人回答。。。帮我解决问题我立马给2人气+20金粒,决不食言
20查看0回复惨案,求人回答。。。帮我解决问题我立马给2人气+20金粒,决不食言
你这个代码有点长= =不太好看(懒),你可以试试先自己进行调试,一部分一部分的执行,看看哪里出了问题。
完整贴出报错
以及你需要复习下如何查看报错
以及你需要复习下如何查看报错
那我消灭一下零回复吧。。。。。
本帖最后由 ddyy163 于 2017-9-13 15:07 编辑
public class main extends JavaPlugin throws SQLException{
……
}
然后去掉 有SQLException的代码块的trycatch
让服务器自己打印报错,不然你都不知道到底哪里有问题
要学会调试
public class main extends JavaPlugin throws SQLException{
……
}
然后去掉 有SQLException的代码块的trycatch
让服务器自己打印报错,不然你都不知道到底哪里有问题
要学会调试
你你为何不试试sqlibrary呢。。