sql >> データベース >  >> RDS >> SQLite

Android:InsertHelperが非推奨の場合の一括挿入

    SQLiteStatementにはバインディングメソッドもあり、SQLiteProgramを拡張します。

    トランザクションで実行するだけです:

        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();
        }
    

    編集

    SQLiteQueryBuilderで適切なソリューションを見つけることができませんが、次のように簡単です。

    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();
    }
    


    1. ここでEXECUTEIMMEDIATEが必要なのはなぜですか?

    2. MySQLでEntityFrameworkウィザードがクラッシュする

    3. SQLServerの値のリストから選択するにはどうすればよいですか

    4. MySQLクエリのWHERE句で列エイリアスを使用するとエラーが発生します