Обновить базу данных sybase за один раз? - PullRequest
0 голосов
/ 05 января 2012

У меня есть файл dbf, и я должен обновить базу данных sybase.Я поместил все записи из файла dbf в однопользовательскую карту, первый аргумент в которой представляет собой значение, которое должно быть установлено в банке данных, а второй - условие условия, в данном случае Memo.Как я могу обновить базу данных Sybase?

public static void updateBcHeader( Map<String,String> list ){
    String query = "update BcHeader\n" +
            "set Label='poika' \n" +
            "where Memo like 'A'";


}

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Цикл по записям на карте и выполнение оператора обновления для каждой записи:

PreparedStatement stmt = 
    connection.prepareQuery("update BcHeader set Label = ? where Memo like ?");
for (Map.Entry<String, String> entrySet : list.entries()) {
    stmt.setString(1, entry.getKey());
    stmt.setString(2, entry.getValue());
    stmt.executeUpdate();
}

Обратите внимание, что карта - действительно плохой выбор для хранения этих аргументов.Что если у вас есть несколько значений для установки или несколько элементов в предложении where?Что если несколько заметок имеют один и тот же ярлык?Вы должны использовать List<Change>, где Change будет объектом, имеющим поля label и memo.

0 голосов
/ 11 января 2012

Это правильный код, который я протестировал на своем проекте.

        PreparedStatement stmt;
    try {
        stmt = con.prepareStatement("update BcHeader set Label = ? where memo like ?");
        for (Map.Entry<String, String> entry : list.entrySet()) {
        stmt.setString(1, entry.getKey());
        stmt.setTimestamp(2, new Timestamp(new Date().getTime()), Calendar.getInstance());
        stmt.setString(3, entry.getValue());
        stmt.executeUpdate();
    }
    } catch (SQLException e) {
        e.printStackTrace();
    }
...