title: concurrent access SQLite Da
body: <p>I´m developing an app with 3 parts: 
  - JavaFX Desktop app.
  - Java Server WebApp
  - AndroidApp</p>
  
  <p>I´m using Hibernate for mapping a SQLite Database.</p>
  
  <p>But when the desktop app is open and try to insert a new ibject from the AndroidApp throug the Server it gives me an error: <code>java.sql.SQLException: database is locked</code></p>
  
  <p>My hibernate.cfg.xml file:</p>
  
  <pre><code>&lt;property name="show_sql"&gt;true&lt;/property&gt;
  &lt;property name="format_sql"&gt;true&lt;/property&gt;
      &lt;property name="dialect"&gt;dialect.SQLiteDialect&lt;/property&gt;
      &lt;property name="connection.driver_class"&gt;org.sqlite.JDBC&lt;/property&gt;
      &lt;property name="connection.url"&gt;jdbc:sqlite:grainsa_provisional.sqlite&lt;/property&gt;
      &lt;property name="connection.username"&gt;&lt;/property&gt;
      &lt;property name="connection.password"&gt;&lt;/property&gt;
  </code></pre>
  
  <p>And my "Objects Manager",the same way in the Server and in the Desktop  by example:</p>
  
  <pre><code>private Session mSession;
  private Transaction mTransaction;
  
  private void initQuery() throws HibernateException {
      mSession = HibernateUtil.getSessionFactory().openSession();
      mTransaction = mSession.beginTransaction();
  }
  
  private void manejaExcepcion(HibernateException hibernateException) {
      mTransaction.rollback();
      throw new HibernateException("ha ocurrido un error con la Base de Datos!!!", hibernateException);
  }
  
  
  public Conductor selectConductorByID(Integer id) {
      Conductor conductor = new Conductor();
      try{
          initQuery();
          conductor = (Conductor) mSession.get(Conductor.class, id);
      } catch (HibernateException e){
          manejaExcepcion(e);
          throw e;
      } finally {
          mSession.close();
      }
      return conductor;
  }
  </code></pre>
  
  <p>If you need more information please ask!</p>
  
  <p>What i´m doing wrong?</p>
  
  <p>Thanks everyone and sorry about my english!</p>
  
  <p>Edit: ím thinking to change the acces mode of mi desktop JavaFX app to make the query through the server, but it will take me alot of time, and i do not think that is the best way to do it..</p>
  
  <p>Edit2:
  This is the right way to open, make query and close the conexion to the databasa to lock/query/unlock?</p>
  
  <pre><code>private void initQuery() throws HibernateException {
      mSession = HibernateUtil.getSessionFactory().openSession();
      mTransaction = mSession.beginTransaction();
  }
  
  private void manejaExcepcion(HibernateException hibernateException) {
      mTransaction.rollback();
      throw new HibernateException("ha ocurrido un error con la Base de Datos!!!", hibernateException);
  }
  
  
  public Conductor selectConductorByID(Integer id) {
      Conductor conductor = new Conductor();
      try{
          initQuery();
          conductor = (Conductor) mSession.get(Conductor.class, id);
      } catch (HibernateException e){
          manejaExcepcion(e);
          throw e;
      } finally {
          mSession.close();
      }
      return conductor;
  }
  </code></pre>
  
  <p>Please help! and thanks again!
  I´m a little bit deseperated...</p>