从模型中获取SQL插入语句字符串?

时间:2017-07-12 15:57:21

标签: android mysql dbflow

非常简单的问题,假设我已经获得了表中某行的模型,我想获得创建该行所需的insert语句。

List<MyModel> updatedRows = new Select()
                .from(MyDatabase.getMyModels().get(table))
                .where(Condition.column(NameAlias.builder("id").build())
                .in(new Select(UpdatedRecord$Table.updated_record_id)
                        .from(UpdatedRecord.class)
                        .where(UpdatedRecord$Table.updated_table.eq(table))))
                .queryList();

StringBuilder updateStatements = new StringBuilder();
for (MyModel tableModel : updatedRows) {
    // this is the insert statement, but there's no way to get it as a string
    tableModel.getModelAdapter().getInsertStatement();
    updateStatements.append(insertSqlStatementString);
}

tableModel.getModelAdapter().getInsertStatement()正确返回insert语句,但是,它的格式为DatabaseStatement,我无法找到该类的任何文档。我想将insert语句作为字符串。

在调试器中查看该行显示其下方有Statement,其中包含mSQL,其中包含字符串。

任何人都可以帮助我或指出我正确的方向吗?

试了这个无济于事:

String tableCreateStatement = tableModel.getModelAdapter().getCreationQuery();
DatabaseStatement dbSt = tableModel.getModelAdapter().getCompiledStatement();
tableModel.getModelAdapter().bindToInsertStatement(dbSt, tableModel);
AndroidDatabaseStatement a = (AndroidDatabaseStatement)dbSt;
String p = a.getStatement().toString();

1 个答案:

答案 0 :(得分:0)

这是我在DBFlow的主要撰稿人回答我的问题here之后最终使用的内容:

// BaseModel row;
ContentValues values = new ContentValues();
row.getModelAdapter().bindToInsertValues(values, row);
String query = SQLite.insert(row.getClass()).columnValues(values).getQuery();