title: Android - SQLiteStatement (multiple insert) execute fails with API Level 14
body: <p>I use the following code to insert new lines efficiently in a DB :</p>
  
  <pre><code>@Override
  public void insertImpacts(HolderExpense expense, int[] shares, int[] amounts, HolderUser[] users) {
  
      try {
  
          mDb.beginTransaction(); // the insertion of the impacts of one expense are considered to be ONE block
  
          String sql = "INSERT INTO "+DATABASE_TABLE_IMPACTS+" "+
          "("+IMPACT_USERROWID+", "+IMPACT_EXPENSEROWID+", "+IMPACT_TTROWID+", "+IMPACT_NUMBEROFPARTS+", "+IMPACT_FIXEDAMOUNT+") VALUES (?, ?, ?, ?, ?)";
  
          SQLiteStatement stmt = mDb.compileStatement(sql);
  
          stmt.bindLong(2, expense.rowId);
          stmt.bindLong(3, expense.tt.rowId);
  
          int i = 0;
  
          while (i &lt; shares.length) {
  
              if (users[i] != null) {
  
                  Log.v(TAG, "user " +i+": users[i].rowId:"+users[i].rowId+" expense.rowId:"+expense.rowId+" expense.tt.rowId:"+expense.tt.rowId+" shares[i]:"+shares[i]+" amounts[i]:"+amounts[i]+" ");
  
                  stmt.bindLong(1, users[i].rowId);
                  stmt.bindString(4, shares[i]+"");
                  stmt.bindString(5, amounts[i]+"");
  
                  stmt.execute();
  
              }
              i++;
          }
  
          stmt.close();
  
          mDb.setTransactionSuccessful();
  
      } 
      catch (Exception e) { e.printStackTrace(); throw new RuntimeException("insertImpacts() failed"); } 
      finally { mDb.endTransaction(); }
  
  }
  </code></pre>
  
  <p>It works until android 4.x where I get that error:</p>
  
  <pre><code>02-26 14:27:46.179: W/System.err(937): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
  
  02-26 14:27:46.179: W/System.err(937):  at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
  
  02-26 14:27:46.219: W/System.err(937):  at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:92)
  
  02-26 14:27:46.219: W/System.err(937):  at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:70)
  </code></pre>
  
  <p>Seems it crashes at stmt.execute() when inserting the second line into the table.</p>
  
  <p>Any clue ?</p>
  
  <p>-- EDITION --</p>
  
  <p>The schema of the table is the following:</p>
  
  <pre><code> private static final String DATABASE_CREATE_TABLE_IMPACTS =
          "create table " + DATABASE_TABLE_IMPACTS + " (" 
          + IMPACT_ROWID + " integer primary key autoincrement, "
          + IMPACT_USERROWID + " integer not null, "
          + IMPACT_EXPENSEROWID + " integer not null, "
          + IMPACT_TTROWID + " integer not null, "
          + IMPACT_NUMBEROFPARTS + " integer not null, "
          + IMPACT_FIXEDAMOUNT + " integer not null, "
          + "constraint i_cstr1 unique ("+IMPACT_USERROWID+", "+IMPACT_EXPENSEROWID+")); ";
  </code></pre>
  
  <p>This code works like a charm on Android 2.2 (but fails on Android 4.0).</p>
  
  <p>Print of the two first lines I insert (it crashes when trying to insert the second):</p>
  
  <pre><code>02-26 14:27:46.069: E/DatabaseAdapter.java(937): user 0: users[i].rowId:7 expense.rowId:2 expense.tt.rowId:2 shares[i]:1 amounts[i]:-1 
  02-26 14:27:46.069: E/DatabaseAdapter.java(937): user 1: users[i].rowId:5 expense.rowId:2 expense.tt.rowId:2 shares[i]:1 amounts[i]:-1 
  </code></pre>