code: public void execSQL(String sql, Object[] bindArgs) throws SQLException {
          if (bindArgs == null) {
              throw new IllegalArgumentException("Empty bindArgs");
          }
          executeSql(sql, bindArgs);
      }
docs: Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE.
  <p>
  For INSERT statements, use any of the following instead.
  <ul>
  <li>{@link #insert(String, String, ContentValues)}</li>
  <li>{@link #insertOrThrow(String, String, ContentValues)}</li>
  <li>{@link #insertWithOnConflict(String, String, ContentValues, int)}</li>
  </ul>
  <p>
  For UPDATE statements, use any of the following instead.
  <ul>
  <li>{@link #update(String, ContentValues, String, String[])}</li>
  <li>{@link #updateWithOnConflict(String, ContentValues, String, String[], int)}</li>
  </ul>
  <p>
  For DELETE statements, use any of the following instead.
  <ul>
  <li>{@link #delete(String, String, String[])}</li>
  </ul>
  <p>
  For example, the following are good candidates for using this method:
  <ul>
  <li>ALTER TABLE</li>
  <li>CREATE or DROP table / trigger / view / index / virtual table</li>
  <li>REINDEX</li>
  <li>RELEASE</li>
  <li>SAVEPOINT</li>
  <li>PRAGMA that returns no data</li>
  </ul>
  </p>
  <p>
  When using {@link #enableWriteAheadLogging()}, journal_mode is
  automatically managed by this class. So, do not set journal_mode
  using "PRAGMA journal_mode'<value>" statement if your app is using
  {@link #enableWriteAheadLogging()}
  </p>
  
  @param sql the SQL statement to be executed. Multiple statements separated by semicolons are
  not supported.
  @param bindArgs only byte[], String, Long and Double are supported in bindArgs.
  @throws SQLException if the SQL string is invalid