从模型中获取 SQL 插入语句字符串?
Get SQL insert statement string from model?
非常简单的问题,假设我在 table 中获得了一行的模型,我想获得创建该行所需的插入语句。
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()
正确地 returns 插入语句,但是,它是 DatabaseStatement
的形式,我找不到该 class 的任何文档.我想要插入语句作为字符串。
查看调试器中的那一行显示它下面有一个 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();
这是我在 DBFlow 的主要贡献者回答了我的问题后最终使用的 here:
// BaseModel row;
ContentValues values = new ContentValues();
row.getModelAdapter().bindToInsertValues(values, row);
String query = SQLite.insert(row.getClass()).columnValues(values).getQuery();
非常简单的问题,假设我在 table 中获得了一行的模型,我想获得创建该行所需的插入语句。
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()
正确地 returns 插入语句,但是,它是 DatabaseStatement
的形式,我找不到该 class 的任何文档.我想要插入语句作为字符串。
查看调试器中的那一行显示它下面有一个 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();
这是我在 DBFlow 的主要贡献者回答了我的问题后最终使用的 here:
// BaseModel row;
ContentValues values = new ContentValues();
row.getModelAdapter().bindToInsertValues(values, row);
String query = SQLite.insert(row.getClass()).columnValues(values).getQuery();