Java 将HashMap发送到SQL数据库

Java 将HashMap发送到SQL数据库,java,mysql,hashmap,Java,Mysql,Hashmap,我的代码有点错误:/ 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 = "sage

我的代码有点错误:/

    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;
   }

我不知道代码出了什么问题,如果有人能帮我,我会永远爱你。

我假设你已经在数据库中创建了一个表,它有一个
模式,有点像这样(这有点特定于MySQL):

现在让您使用JDBC将数据插入到这个表中,我建议您创建一个方法,使用
PreparedStatement
数据库中插入数据。如果您是JDBC新手,显然首先需要通读以了解如何使用JDBC

假设表结构如上所述,则用于此的
PreparedStatement
如下所示:

PreparedStatement ps = connection.prepareStatement("INSERT INTO ClanTable(name,roomOwner) values (?, ?)");
for(Map.Entry<String, Clan> entries: clans.entrySet()){
    Clan clan = entries.getValue();
    ps.setString(1, clan.getName());
    ps.setString(1, clan.getOwner());

    ps.executeUpdate();
}
然后,您将遍历
映射
,并执行此语句。请注意,如果地图的条目数较少,则可以执行如下操作:

PreparedStatement ps = connection.prepareStatement("INSERT INTO ClanTable(name,roomOwner) values (?, ?)");
for(Map.Entry<String, Clan> entries: clans.entrySet()){
    Clan clan = entries.getValue();
    ps.setString(1, clan.getName());
    ps.setString(1, clan.getOwner());

    ps.executeUpdate();
}
for(Map.Entry条目:clans.entrySet()){
Clan Clan=entries.getValue();
ps.setString(1,clan.getName());
ps.setString(1,clan.getOwner());
ps.executeUpdate();
}

您创建的两列与您拥有的
映射之间的映射是什么?(即,
owner
name
与您拥有的
clams
映射到什么)owner是roomOwner,name是roomName我如何在mysql数据库上创建表,因为我认为它可能会有所不同。因此,您的
clams
类中填充了这些信息?你有合适的
getter/setter
方法来访问这些值?另外,你能为你的
Clan
类发布代码吗?这是我的Clan类我相信它设置了这些值。我会把这些值保留为?,?@BrandonTylerJones稍微读一读可能会帮助你理解“?”在这里的意义。我忘了把它放在一个try-and-catch中。我的代码有点问题,我的服务器不会用这个来启动:呜呜,我讨厌看到有人试图给出一个好的答案却没有被接受。
for(Map.Entry<String, Clan> entries: clans.entrySet()){
    Clan clan = entries.getValue();
    ps.setString(1, clan.getName());
    ps.setString(1, clan.getOwner());

    ps.executeUpdate();
}