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

メソッド sendClan を呼び出す私の ClanManager は次のとおりです。

    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

私はあなたがあなたのDBに次のようなテーブルを作成したと仮定していますschema(これは少しMySQL固有です):

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

ここで、JDBCを使用してこのテーブルにデータを挿入するために、databaseを使用してデータを挿入するためのメソッドを作成することをお勧めしますPreparedStatementJDBCを初めて使用する場合は、 「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 に答える