Henüz aynı şeyi yapan birkaç yöntem var, MySQL veritabanıyla arabirim oluştururken farklı bir parametre türü kaydedin veya yükleyin. Şu anda, her tür için farklı bir yöntem var. Bu yöntemleri, farklı türleri destekleyecek şekilde nasıl birleştirebilirim? tipleri her ikisi sayısal olduğu örnekteAynı kodu kullanan ancak farklı türleri kullanan yeniden düzenleme yöntemleri
public static void saveLongArray(Connection con, int playerID, String tableName, String fieldName, long[] array, long[] originalArray) {
try {
for (int i = 0; i < array.length; i++) {
// Check for change before running query
if (array[i] != originalArray[i]) {
if (array[i] != 0 && array[i] != -1) {
PreparedStatement updateQuery = con.prepareStatement("REPLACE INTO `" + tableName + "` (`player_id`, `index`, `" + fieldName + "`) VALUES(?, ?, ?)");
updateQuery.setInt(1, playerID);
updateQuery.setInt(2, i);
updateQuery.setLong(3, array[i]);
updateQuery.execute();
} else {
PreparedStatement deleteQuery = con.prepareStatement("DELETE FROM `" + tableName + "` WHERE `player_id` = ? AND `index` = ?");
deleteQuery.setInt(1, playerID);
deleteQuery.setInt(2, i);
deleteQuery.execute();
}
originalArray[i] = array[i];
}
}
} catch (SQLException ex) {
Logger.getLogger(PlayerSaveHandler.class.getName()).log(Level.SEVERE, "SQL Exception while saving a long array!", ex);
}
}
public static void saveIntArray(Connection con, int playerID, String tableName, String fieldName, int[] array, int[] originalArray) {
try {
for (int i = 0; i < array.length; i++) {
// Check for change before running query
if (array[i] != originalArray[i]) {
if (array[i] != 0 && array[i] != -1) {
PreparedStatement updateQuery = con.prepareStatement("REPLACE INTO `" + tableName + "` (`player_id`, `index`, `" + fieldName + "`) VALUES(?, ?, ?)");
updateQuery.setInt(1, playerID);
updateQuery.setInt(2, i);
updateQuery.setInt(3, array[i]);
updateQuery.execute();
} else {
PreparedStatement deleteQuery = con.prepareStatement("DELETE FROM `" + tableName + "` WHERE `player_id` = ? AND `index` = ?");
deleteQuery.setInt(1, playerID);
deleteQuery.setInt(2, i);
deleteQuery.execute();
}
originalArray[i] = array[i];
}
}
} catch (SQLException ex) {
Logger.getLogger(PlayerSaveHandler.class.getName()).log(Level.SEVERE, "SQL Exception while saving an int array!", ex);
}
}
Not:
Aşağıda farklı henüz çok benzer kullanımı iki yöntem bir örneğidir. Türlerin tamamen farklı olduğu bir durumda (ör. Int ve String), kaçınmak için kaç tane neyden çoğaltma yöntemine sahip olabilirim?
Bu tasarım modelini inceledim, ancak bu durumda kullanmayı asla düşünmemiştim. Teşekkür ederim! – jSherz
Burada ekleyeceğim tek şey, diziler artık ilkeller yerine nesneleri taşıyacağından, 'equals() '(örn.'! Array [i] .equals (originalArray [i]) 'veya "compareTo()" Ayrıca, dizilerin yalnızca sayısal türler içerdiği varsayılır, bu nedenle String için bir davranışa ihtiyacımız yoktur ve tip argümanı muhtemelen güvenli olması için 'olmalıdır. –
jpm
Arabirim içine uygulama eklemek Java'da iyi bir fikir mi? Bu soyut bir sınıf olarak daha iyi olmaz mıydı? – flurdy