2015-03-30 3 views
0

У меня возникла проблема при попытке сохранить существующий запас в среде предварительного производства. То, что я пытаюсь сделать, это на самом деле зациклиться на текстовом файле и вставить подстроки из этого файла в базу данных.Java Hibernate Добавить запрос

Вот класс, который я выполняю:

общественного класса RepriseStock { приват статической сессии;

public RepriseStock() { 
      session = HibernateUtil.getSessionFactory().openSession(); 
      session.beginTransaction(); 
    } 

    public static int insererPartenaires(String sCurrentLine, int i) { 
      String sql = "INSERT INTO PARTENAIRE(ID," 
          + "MVTSOC," 
          + " MVTAGR, " 
          + "MVTNOMSOC," 
          + "MVTCPTTMAG," 
          + "DATEAGREMENT," 
          + "MVTCHAINE," 
          + "MVTRGPT," 
          + "MVTUNION," 
          + "MVTNOMMAG," 
          + "MVTTELSOC," 
          + "MVTADRMAG," 
          + "MVTVILMAG," 
          + "MVTMAIL," 
          + "MVTSITU)" 
          + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 

      Query query = session.createSQLQuery(sql); 

      query.setInteger(0, i); 

      query.setInteger(1, Integer.parseInt(sCurrentLine.substring(0, 3))); 
      query.setInteger(2, Integer.parseInt(sCurrentLine.substring(3, 10))); 
      query.setString(3, sCurrentLine.substring(10, 34)); 
      query.setInteger(4, Integer.parseInt(sCurrentLine.substring(48, 53))); 

      query.setString(5, sCurrentLine.substring(77, 83)); 

      query.setInteger(6, Integer.parseInt(sCurrentLine.substring(86, 90))); 
      query.setInteger(7, Integer.parseInt(sCurrentLine.substring(90, 94))); 
      // union 
      query.setInteger(8, Integer.parseInt(sCurrentLine.substring(94, 98))); 
      // enseigne 30 
      query.setString(9, sCurrentLine.substring(248, 278)); 
      // tel 
      query.setString(10, sCurrentLine.substring(278, 293)); 
      // adresse 
      query.setString(11, sCurrentLine.substring(293, 323)); 
      // ville 
      query.setString(12, sCurrentLine.substring(323, 348)); 
      // mail 

      query.setString(13, sCurrentLine.substring(398, 448)); 
      // situ 
      query.setString(14, sCurrentLine.substring(449, 452)); 

      return query.executeUpdate(); 

    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
      // TODO Module de remplacement de méthode auto-généré 

      BufferedReader br = null; 
      RepriseStock rs = new RepriseStock(); 

      try { 

        String sCurrentLine; 

        br = new BufferedReader( 
            new FileReader( 
                "C:\\Users\\test\\Desktop\\test\\reprise de stock\\nouveauFichierPREPROD.dat")); 
        int i = 0; 
        sCurrentLine = br.readLine(); 
        while ((sCurrentLine = br.readLine()) != null) { 
          i++; 

          RepriseStock.insererPartenaires(sCurrentLine, i); 

          System.out.println("Nombre de fois : " + i); 

        } 

        System.out.println("total (" + i + ")"); 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } finally { 
        try { 
          if (br != null) 
            br.close(); 
        } catch (IOException ex) { 
          ex.printStackTrace(); 
        } 
      } 

    } 

}

После того, как скрипт выполняется, у меня есть общее количество петель 1022 раз. Но данные не сохраняются в таблице оракула (Partenaire)

В моем журнале не обнаружено никаких ошибок.

Вы видите эту проблему?

ответ

2

Похоже, вы не совершаете транзакцию.

Если вы хотите каждое обновление будет отдельная транзакция, попробуйте подвигать session.beginTransaction(); к началу метода insererPartenaires и захватив Transaction объект, возвращенный из этого заявления в переменной. Затем, после каждого обновления, обязательно вызовите commit() на объекте Transaction.

Если вы хотите, чтобы все обновления были одной и той же транзакцией, переместите методы beginTransaction() и commit(), чтобы окружить цикл while основным методом.


Также обратите внимание, что здесь нет необходимости смешать статические и нестатические значения. Попробуйте изменить public static int insererPartenaires(String sCurrentLine, int i) на public int insererPartenaires(String sCurrentLine, int i). Затем просто используйте созданный объект RepriseStock для вызова метода вместо его статического вызова.

Вам также необходимо будет изменить private static Session session будет private Session session

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