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