Guest User

Untitled

a guest
Jun 6th, 2018
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.02 KB | None | 0 0
  1. /* Cita se tabela predmet i ispisuju se svi predmeti koji su obavezni na smeru
  2.  * ciji je id 201. Za svaki od tih predmeta, korisnik se pita da li zeli da
  3.  * predmetu poveca broj bodova za 1, pa ako zeli onda izvrsiti izmenu i potvrditi
  4.  * promenu. Napisati program tako da moze da radi u visekorisnickom
  5.  * rezimu. Obrada jednog predmeta predstavlja jednu transakciju.
  6. */
  7.  
  8.  
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.sql.PreparedStatement;
  12. import java.sql.ResultSet;
  13. import java.sql.SQLException;
  14. import java.sql.Statement;
  15. import java.util.ArrayList;
  16. import java.util.Scanner;
  17.  
  18. public class Primer {
  19.  
  20.     static{
  21.         try {
  22.             Class.forName("com.ibm.db2.jcc.DB2Driver");
  23.         } catch (Exception e) {
  24.             e.printStackTrace();
  25.         }
  26.     }
  27.     public static void main(String[] args) {
  28.         ArrayList<Integer> obradjeni = new ArrayList<Integer>();
  29.         String url = "jdbc:db2://localhost:50001/VSTUD";
  30.         Scanner scanner = new Scanner(System.in);
  31.         Boolean obradjenPredmet = true;
  32.         try {
  33.             Connection con = DriverManager.getConnection(url, "student", "abcdef");
  34.             ResultSet rs = null;
  35.             String sql = "select id_predmeta, naziv " +
  36.                     "from predmet " +
  37.                     "where id_predmeta in (select id_predmeta " +
  38.                                     "from obavezan_predmet " +
  39.                                     "where id_smera = 201) and bodovi <8";
  40.             PreparedStatement ps = con.prepareStatement(sql, rs.HOLD_CURSORS_OVER_COMMIT);
  41.             rs = otvoriKursor(ps);
  42.            
  43.             String update = "update predmet " +
  44.                     "set bodovi = bodovi + 1 " +
  45.                     "where current of ";
  46.             String cursorName = null;
  47.            
  48.            
  49.             while(rs.next()){
  50.                 try {
  51.                     int id_predmeta = rs.getInt(1);
  52.                     String naziv = rs.getString(2);
  53.                     if(!obradjeni.contains(id_predmeta)){
  54.                         System.out.println("Predmet " + naziv);
  55.                         System.out.println("Da li zelite da azurirate broj bodova?");
  56.                         char c = scanner.next().charAt(0);
  57.                        
  58.                         if(c=='d' || c=='D'){
  59.                             cursorName =  rs.getCursorName();
  60.                             Statement updateS = con.createStatement();
  61.                             /* Azuriranje */
  62.                             try{
  63.                                 updateS.executeUpdate(update + cursorName);
  64.                                 System.out.println("Azurirano");
  65.                             }catch(SQLException e){
  66.                                
  67.                                 /* Proverava se da li trazeni X katanac ne dovodi do nekog
  68.                                  * od problema konkurentog izvrsavanja
  69.                                  */
  70.                                 if(e.getErrorCode() == -911 || e.getErrorCode() == -913){
  71.                                     rs.close();
  72.                                     rs = obradiCekanje(rs, con, ps);
  73.                                     obradjenPredmet = false;
  74.                                 }
  75.                             }                          
  76.                         }
  77.                         /* Ukoliko je predmet obradjen tj. promenljiva obradjenPredmet
  78.                          * nepromenjena evidentiramo obradjen predmet
  79.                          */
  80.                         if(obradjenPredmet){
  81.                             /* Obrada jednog predmeta treba da predstavlja jednu transakciju,
  82.                              * zato sada zelimo commit */
  83.                             /* Kursor je otvoren sa opcijom WITH HOLD, tj. naredba je pripremljena
  84.                              * sa opcijom HOLD_CURSORS_OVER_COMMIT pa commit ne zatvara kursor. */
  85.                             con.commit();
  86.                             obradjeni.add(id_predmeta);
  87.                         }
  88.                         /* Priprema promenljive za narednu iteraciju. */
  89.                         obradjenPredmet = true;
  90.                     }
  91.                 } catch(SQLException e){
  92.                     /* Proverava se da li trazeni S katanac ne dovodi do nekog
  93.                      * od problema konkurentog izvrsavanja. Ukoliko da obradjuje
  94.                      * se cekanje.
  95.                      */
  96.                     if(e.getErrorCode() == -911 || e.getErrorCode() == -913)
  97.                         rs = obradiCekanje(rs, con, ps);
  98.                 }          
  99.             }
  100.             con.commit();
  101.             rs.close();
  102.             ps.close();
  103.             con.close();
  104.         } catch (SQLException e) {
  105.             System.out.println("SQL error: SQLCODE" + e.getErrorCode());
  106.         } catch (Exception e) {
  107.             e.printStackTrace();
  108.         }
  109.     }
  110.     private static ResultSet obradiCekanje(ResultSet rs, Connection con, PreparedStatement ps) throws SQLException {
  111.         System.out.println("Objekat je zakljucan od strane druge transakcije! Sacekajte!");
  112.         con.rollback();
  113.         System.out.println("Rollback");
  114.         return otvoriKursor(ps);
  115.     }
  116.     private static ResultSet otvoriKursor(PreparedStatement ps) throws SQLException {
  117.         ResultSet rs = ps.executeQuery();
  118.         return rs;
  119.     }
  120.  
  121. }
Add Comment
Please, Sign In to add comment