0

我的代码在某种程度上是错误的:/

    public static Connection con = null;
    public static void createConnection()
   {
     try
     {
       Class.forName("com.mysql.jdbc.Driver").newInstance();
       String str1 = "s1.infinitysrv.com:3306";
       String str2 = "sagesca1_hiscores";
       String str3 = "sagesca1_server";
       String str4 = "pass";
       con = DriverManager.getConnection("jdbc:mysql://" + str1 + "/" + str2, str3, str4);
       stmt = con.createStatement();
       System.out.println("Connection to SQL database successful!");
     } catch (Exception localException) {
       System.out.println("Connection to SQL database failed");
       localException.printStackTrace();
     }
   }
       public static Map<String, Clan> clans;
   public static boolean sendClans(){
    try {       
        try {
            clans = (HashMap<String, Clan>) XStreamUtil.getXStream().fromXML(new FileInputStream("data/clans.xml"));
        } catch (Exception e) {
            clans = new HashMap<String, Clan>();
        }
        for (Map.Entry<String, Clan> entries : clans.entrySet()) {
            final Clan clan = entries.getValue();
            clan.setTransient();
            PreparedStatement ps = con.prepareStatement("INSERT INTO clans(name,roomOwner) values (?, ?)");
            ps.setString(1, clan.getName());
            ps.setString(2, clan.getOwner());
            ps.executeUpdate();
        }
    } catch (SQLException e) {
        //e.printStackTrace();
        return false;
    }
    return true;
   }

这是我的 ClanManager 调用方法 sendClan

    private Map<String, Clan> clans;

@SuppressWarnings("unchecked")
public ClanManager() {
    Logger.getInstance().info("Loading clans....");
    try {
        clans = (HashMap<String, Clan>) XStreamUtil.getXStream().fromXML(new FileInputStream("data/clans.xml"));
    } catch (Exception e) {
        clans = new HashMap<String, Clan>();
    }
    for (Map.Entry<String, Clan> entries : clans.entrySet()) {
        final Clan clan = entries.getValue();
        clan.setTransient();
        //Hiscores.sendClans();
    }
    Logger.getInstance().info("Loaded " +clans.size()+ " SageScape clans.");
}

我不太确定问题是什么,但是当我运行我的服务器时,错误指向了这一点:

PreparedStatement ps = con.prepareStatement("INSERT INTO clans(name,roomOwner) values (?, ?)");

我不知道代码有什么问题,如果有人可以帮助我,我会永远爱你。

4

1 回答 1

2

我假设您已经在数据库中创建了一个表,该表schema有点像这样(这有点 MySQL 特有):

CREATE TABLE ClanTable(
    name        varchar(30),
    roomOwner   varchar(30)
)

现在让您使用 JDBC 将数据插入此表,我建议您创建一个方法来database使用PreparedStatement. 如果您是 JDBC 新手,显然您首先需要通读“JDBC 基础知识”以了解如何使用 JDBC。

假设一个表结构如上,PreparedStatement这将是这样的:

PreparedStatement ps = connection.prepareStatement("INSERT INTO ClanTable(name,roomOwner) values (?, ?)");

然后,您将遍历map并执行此语句。请注意,如果您的地图的条目数量较少,则可以执行以下操作:

for(Map.Entry<String, Clan> entries: clans.entrySet()){
    Clan clan = entries.getValue();
    ps.setString(1, clan.getName());
    ps.setString(1, clan.getOwner());

    ps.executeUpdate();
}
于 2012-08-31T22:25:02.527 回答