2014-02-13 1 views
2

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

Так что этот маленький кусочек кода работает, но не все время. я запускал его несколько раз и примерно в 50% случаев, когда акции фактически выросли. чтобы проверить это, я написал еще один небольшой цикл while, который печатает таблицу с необходимыми данными. любые идеи, почему это не работает в 100% случаев?

В базе данных имеется 1071 запись, и я запускаю этот код сразу после получения результатов. Должен ли я ждать, прежде чем запускать его снова?

package stockbier; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

public class bierenstock { 

public static void main(String[] args) { 

try (Connection con = DriverManager.getConnection(
      "jdbc:mysql://noelvaes.eu/StudentDB", "student", "student123"); 
    PreparedStatement stmt = con.prepareStatement 
     ("select * from Beers", 
     ResultSet.TYPE_SCROLL_INSENSITIVE, 
     ResultSet.CONCUR_UPDATABLE);) { 

    ResultSet rs = stmt.executeQuery(); 
    while (rs.next()) { 
      // edited int stock 
     int stock = rs.getInt("Stock") + 50; 
     rs.updateInt("Stock", stock); 
     rs.updateRow(); 

    } 

    rs.close(); 

    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

} 

ответ

0

Попытка с ниже изменениями:

public static void main(String[] args) { 

try (Connection con = DriverManager.getConnection(
     "jdbc:mysql://noelvaes.eu/StudentDB", "student", "student123"); 
PreparedStatement stmt = con.prepareStatement 
    ("select * from Beers", 
    ResultSet.TYPE_SCROLL_SENSITIVE, 
    ResultSet.CONCUR_UPDATABLE);) { 

ResultSet rs = stmt.executeQuery(); 
while (rs.next()) { 
    int stock = rs.getInt("Stock") + 50; 
    rs.updateInt("Stock", stock); 
    rs.updateRow(); 
} 

} catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} finally { 
    if (stmt != null) { stmt.close(); } 
}  
}  

Тип объекта ResultSet определяет уровень его функциональности в двух областях: способы, в которых курсор можно манипулировать, и , как параллельные изменения сделанные в исходный источник данных, отражаются объектом ResultSet.

TYPE_SCROLL_INSENSITIVE:

Результат можно прокручивать; его курсор может перемещаться как вперед, так и назад относительно текущей позиции, и он может перейти в абсолютное положение . Результирующий набор нечувствителен к изменениям, внесенным в базовый источник данных, пока он открыт. Он содержит строки, которые удовлетворяют запросу либо во время выполнения запроса, либо при извлечении строк .

TYPE_SCROLL_SENSITIVE:

Результат можно прокручивать; его курсор может перемещаться как вперед, так и назад относительно текущей позиции, и он может перейти в абсолютное положение . Набор результатов отражает изменения, внесенные в базовый источник данных , в то время как результирующий набор остается открытым.

См. Updating ResultSet для получения более подробной информации.

0

У вашего стола есть ПЕРВЫЙ КЛЮЧ?

Задание того, что результирующий набор может быть обновляемым, не гарантирует, что набор результатов , который вы получите, будет фактически обновляемым. Драйверы, которые не поддерживают , поддерживают обновляемые результирующие наборы, которые возвращают тот, который доступен только для чтения. В дополнение, чтобы получить обновляемый набор результатов, запрос должен обычно указать первичный ключ как один из выбранных столбцов, и он должен выбирать столбцы только из одной таблицы.

+0

благодарит за комментарий Marius, но прошло некоторое время с тех пор, как я писал этот код, и я, возможно, больше не помню. в основном я не тронул JDBC после завершения этого упражнения!Сейчас я работаю над проектом, когда мы используем исключительно спящий режим. – YoNuevo

+0

Np. Супер, что вы сейчас работаете над проектом! Я читаю книгу «Java Database Programming Bible» на JDBC. Он имеет примеры и прост. :) – Willmore

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

  • Нет связанных вопросов^_^