Loading core/java/android/database/DatabaseUtils.java +52 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,58 @@ public class DatabaseUtils { } } /** {@hide} */ public static long executeInsert(@NonNull SQLiteDatabase db, @NonNull String sql, @Nullable Object[] bindArgs) throws SQLException { try (SQLiteStatement st = db.compileStatement(sql)) { bindArgs(st, bindArgs); return st.executeInsert(); } } /** {@hide} */ public static int executeUpdateDelete(@NonNull SQLiteDatabase db, @NonNull String sql, @Nullable Object[] bindArgs) throws SQLException { try (SQLiteStatement st = db.compileStatement(sql)) { bindArgs(st, bindArgs); return st.executeUpdateDelete(); } } /** {@hide} */ private static void bindArgs(@NonNull SQLiteStatement st, @Nullable Object[] bindArgs) { if (bindArgs == null) return; for (int i = 0; i < bindArgs.length; i++) { final Object bindArg = bindArgs[i]; switch (getTypeOfObject(bindArg)) { case Cursor.FIELD_TYPE_NULL: st.bindNull(i + 1); break; case Cursor.FIELD_TYPE_INTEGER: st.bindLong(i + 1, ((Number) bindArg).longValue()); break; case Cursor.FIELD_TYPE_FLOAT: st.bindDouble(i + 1, ((Number) bindArg).doubleValue()); break; case Cursor.FIELD_TYPE_BLOB: st.bindBlob(i + 1, (byte[]) bindArg); break; case Cursor.FIELD_TYPE_STRING: default: if (bindArg instanceof Boolean) { // Provide compatibility with legacy // applications which may pass Boolean values in // bind args. st.bindLong(i + 1, ((Boolean) bindArg).booleanValue() ? 1 : 0); } else { st.bindString(i + 1, bindArg.toString()); } break; } } } /** * Binds the given Object to the given SQLiteProgram using the proper * typing. For example, bind numbers as longs/doubles, and everything else Loading core/java/android/database/sqlite/SQLiteQueryBuilder.java +3 −3 Original line number Diff line number Diff line Loading @@ -626,7 +626,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } return db.executeSql(sql, sqlArgs); return DatabaseUtils.executeInsert(db, sql, sqlArgs); } /** Loading Loading @@ -702,7 +702,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } return db.executeSql(sql, sqlArgs); return DatabaseUtils.executeUpdateDelete(db, sql, sqlArgs); } /** Loading Loading @@ -762,7 +762,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } return db.executeSql(sql, sqlArgs); return DatabaseUtils.executeUpdateDelete(db, sql, sqlArgs); } private void enforceStrictColumns(@Nullable String[] projection) { Loading Loading
core/java/android/database/DatabaseUtils.java +52 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,58 @@ public class DatabaseUtils { } } /** {@hide} */ public static long executeInsert(@NonNull SQLiteDatabase db, @NonNull String sql, @Nullable Object[] bindArgs) throws SQLException { try (SQLiteStatement st = db.compileStatement(sql)) { bindArgs(st, bindArgs); return st.executeInsert(); } } /** {@hide} */ public static int executeUpdateDelete(@NonNull SQLiteDatabase db, @NonNull String sql, @Nullable Object[] bindArgs) throws SQLException { try (SQLiteStatement st = db.compileStatement(sql)) { bindArgs(st, bindArgs); return st.executeUpdateDelete(); } } /** {@hide} */ private static void bindArgs(@NonNull SQLiteStatement st, @Nullable Object[] bindArgs) { if (bindArgs == null) return; for (int i = 0; i < bindArgs.length; i++) { final Object bindArg = bindArgs[i]; switch (getTypeOfObject(bindArg)) { case Cursor.FIELD_TYPE_NULL: st.bindNull(i + 1); break; case Cursor.FIELD_TYPE_INTEGER: st.bindLong(i + 1, ((Number) bindArg).longValue()); break; case Cursor.FIELD_TYPE_FLOAT: st.bindDouble(i + 1, ((Number) bindArg).doubleValue()); break; case Cursor.FIELD_TYPE_BLOB: st.bindBlob(i + 1, (byte[]) bindArg); break; case Cursor.FIELD_TYPE_STRING: default: if (bindArg instanceof Boolean) { // Provide compatibility with legacy // applications which may pass Boolean values in // bind args. st.bindLong(i + 1, ((Boolean) bindArg).booleanValue() ? 1 : 0); } else { st.bindString(i + 1, bindArg.toString()); } break; } } } /** * Binds the given Object to the given SQLiteProgram using the proper * typing. For example, bind numbers as longs/doubles, and everything else Loading
core/java/android/database/sqlite/SQLiteQueryBuilder.java +3 −3 Original line number Diff line number Diff line Loading @@ -626,7 +626,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } return db.executeSql(sql, sqlArgs); return DatabaseUtils.executeInsert(db, sql, sqlArgs); } /** Loading Loading @@ -702,7 +702,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } return db.executeSql(sql, sqlArgs); return DatabaseUtils.executeUpdateDelete(db, sql, sqlArgs); } /** Loading Loading @@ -762,7 +762,7 @@ public class SQLiteQueryBuilder { Log.d(TAG, sql); } } return db.executeSql(sql, sqlArgs); return DatabaseUtils.executeUpdateDelete(db, sql, sqlArgs); } private void enforceStrictColumns(@Nullable String[] projection) { Loading