【问题标题】:Get SQL insert statement string from model?从模型中获取 SQL 插入语句字符串?
【发布时间】:2017-07-12 15:57:20
【问题描述】:

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

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() 正确地返回插入语句,但是,它是DatabaseStatement 的形式,我找不到该类的任何文档。我希望将插入语句作为字符串。

在调试器中查看该行会发现,在它下面有一个 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();

【问题讨论】:

    标签: android mysql dbflow


    【解决方案1】:

    这是我在 DBFlow 的主要贡献者回答我的问题 here 后最终使用的:

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

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2011-06-20
      相关资源
      最近更新 更多