SQLiteStatement also has binding methods, it extends SQLiteProgram .
Just run it in the transaction:
final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); final SQLiteStatement statement = db.compileStatement(INSERT_QUERY); db.beginTransaction(); try { for(MyBean bean : list){ statement.clearBindings(); statement.bindString(1, bean.getName()); // rest of bindings statement.execute(); //or executeInsert() if id is needed } db.setTransactionSuccessful(); } finally { db.endTransaction(); }
EDIT
I cannot find a good solution in SQLiteQueryBuilder , but it is simple:
final static String INSERT_QUERY = createInsert(DbSchema.TABLE_NAME, new String[]{DbSchema.NAME, DbSchema.TITLE, DbSchema.PHONE}); static public String createInsert(final String tableName, final String[] columnNames) { if (tableName == null || columnNames == null || columnNames.length == 0) { throw new IllegalArgumentException(); } final StringBuilder s = new StringBuilder(); s.append("INSERT INTO ").append(tableName).append(" ("); for (String column : columnNames) { s.append(column).append(" ,"); } int length = s.length(); s.delete(length - 2, length); s.append(") VALUES( "); for (int i = 0; i < columnNames.length; i++) { s.append(" ? ,"); } length = s.length(); s.delete(length - 2, length); s.append(")"); return s.toString(); }
pawelzieba Jan 15 '13 at 19:00 2013-01-15 19:00
source share