2016-04-21 2 views
0

Хотя Вставка даты в MySQL, у меня есть следующий кодМожно ли избежать создания java.sql.Date объекта в цикле For Loop

DateFormat format_date = new SimpleDateFormat("yy-mm-dd"); 
for (Stocker s : symbol_set) { 
    insert_stmt.setString(1, s.getName()); 
    insert_stmt.setDouble(2, s.getPrice()); 
    Date d = format_date.parse(s.getCurr_day()); 
    java.sql.Date sqlDate = new java.sql.Date(d.getTime()); 
    insert_stmt.setDate(3, sqlDate); 
    insert_stmt.setString(4, s.getVolume()); 
    insert_stmt.setDouble(5, s.getGainloss()); 
    insert_stmt.addBatch(); 
} 
insert_stmt.executeBatch(); 

Не могли бы вы, пожалуйста, дайте мне знать, Можно ли избежать создания Java. sql.Date Object в For Loop или это нормальное поведение и нельзя пропустить?

+0

Почему вы не создаете переменную вне цикла, а затем просто вызываете переменную внутри цикла, назначая ей новую дату каждой итерации? –

+1

@EvanBechtol: Это не принесло бы каких-либо преимуществ в производительности. Просто объявление переменной в цикле не требует затрат. –

+0

Так что в основном вы спрашиваете, есть ли способ разбора 's.getCurr_day()' to 'java.sql.Date' напрямую. Звучит как преждевременная микро-оптимизация для меня, FWIW. –

ответ

3

Это действительно зависит от реализации PreparedStatement.setDate() и addBatch().

Если этих методов клонировать все соответствующие данные надлежащим образом, вы можете создать один экземпляр java.sql.Date вне цикла, а затем вызвать setTime этого экземпляра перед вызовом setDate.

Однако это поведение не задокументировано, поэтому я лично не хотел бы полагаться на него. (Это одно раздражение изменчивых типов - вы не можете легко гарантировать эффект мутации и повторного использования.) В основном это нормальное поведение, если вы действительно не уверены в том, что полагаетесь на конкретную деталь реализации - и это звучит очень плохо Идея для меня.

Хорошая новость заключается в том, что каждый экземпляр будет небольшим ... Я был бы очень удивлен, если бы это было действительно проблема производительности по сравнению с тем, что вы разговариваете с базой данных.

Смежные вопросы