我对Groovy(2.4.7)
是新手,这就是我要做的。基本上,目标是将数据从Excel加载到SQL Server。有两个列表,一个是键,另一个是值。如何调用这两个列表来运行批处理SQL语句?
这是我到目前为止所拥有的:
def k = [Field1,Field2,Field3,Field4,Field5]
def Value1 = 1
def Value2 = 2
def Value3 = 3
def Value4 = 4
def Value5 = 5
def v = [Value1,Value2,Value3,Value4,Value5]
def query = """\
INSERT INTO TableA
($k)
VALUES
($v)
"""
sql.withTransaction {
sql.withBatch(20) {stmt ->
stmt.addBatch(query)
}
}
> < li>
通过这样做,似乎Groovy会将整个列表视为一个大字符串。我可以将列表输出为字符串,并删除单引号,但这似乎并不酷。我们能参数化列表中的字段吗?
对于k列表,我是否需要对所有字段使用单引号,如下所示,因为它给了我错误:
< code>def k = ['Field1 ',' Field2 ',' Field3 ',' Field4 ',' Field5']
我知道字段名应该是字符串,但下面的方法可以一次运行一个SQL查询。我觉得修改列表总比搞乱查询好。但如果我不这样做,请阻止我。
def query = """\ INSERT INTO TableA (Field1,Field2,Field3,Field4,Field5) VALUES (${Value1},${Value2},${Value3},${Value4},${Value5}) """ sql.execute(query)
我甚至可以将这两个列表添加到地图中(见下文)。这会是运行批处理查询的更好方法吗?我只是不知道如何在这个项目中使用地图。
< code>def m = [k,v]。转置()。收集条目{it}
当然,我想出的方法可能并不理想,我也想防止任何SQL注入。如果您能为我提供一个示例代码,我愿意接受任何最佳实践。再次感谢您的时间和帮助。
好的,这是我想出的,它起作用了。这也适用于动态字段。据我所知,到目前为止,由于SQL注入,这可能不是一个好的答案,但这只是在授权人内部使用。但是欢迎任何人的意见来改进这个方法。
def sheet1 // Need to read in your Excel sheet
def sql = Sql.newInstance(// Your SQL connection config)
def tableName = "TableA"
def k = ['Field1','Field2','Field3','Field4','Field5']
// Code below is from http://stackoverflow.com/questions/20150880/insert-a-hashmap-into-any-database-table/20151521#20151521
StringBuilder query = new StringBuilder("INSERT INTO ").append(tableName).append(" (")
StringBuilder placeholders = new StringBuilder()
for (Iterator<String> iter = k.iterator(); iter.hasNext();) {
query.append(iter.next())
placeholders.append("?")
if (iter.hasNext()) {
query.append(",")
placeholders.append(",")
}
}
query.append(") VALUES (").append(placeholders).append(")")
sql.withTransaction {
sql.withBatch(20, query.toString()) {ps ->
sheet1.each {data ->
def Value1 = 1
def Value2 = 2
def Value3 = 3
def Value4 = 4
def Value5 = 5
def v = [Value1,Value2,Value3,Value4,Value5]
ps.addBatch(v)
}
}
}
sql.close()
我有一个实体,看起来像这样: 输入数据是一个
的默认行为 mapper() 在映射的 Table 到映射的对象属性中,每个属性都根据列本身的名称命名(特别是 key 属性 Column )这种行为可以通过几种方式进行修改。 从属性名称清楚地命名列 默认情况下,映射与 Column 与映射属性的相同-具体来说,它与 Column.key 属性对 Column ,默认与 Column.name . 指定给映射到的python属性的名称 Colum
我如何在下面的场景中使用Mapstruct进行bean映射。 现在我想把sourceId映射到targetId,courseName映射到subjectName,studentName映射到memberName(list到list)。
问题内容: 映射双向列表时,我不了解Hibernate的行为。Hibernate生成的SQL语句对我来说并不是最佳的。有人可以启发我吗? 情况如下:我有一对多的父子关系。我将此关系与双向列表映射。 根据《Hibernate注释参考指南》(第7章:与索引集合的双向关联),映射应如下所示: 但是在这种情况下,Hibernate在保留一个孩子的父母时会产生三个SQL语句: 第三条语句似乎是多余的,因为并
问题内容: 如何在Hibernate中映射整数列表? 像这样: 问题答案: 使用@ElementCollection映射。参阅文件
问题内容: 我正在使用Hibernate 3.3和PostgreSQL 8.x,并希望使用Hibernate批注来映射不是主键的自动增量列。 只要该列是由数据库而不是由Hibernate自动递增的,则在Postgres中使用SERIAL类型或序列映射该列都没有关系。我尝试了以下映射,但它们始终生成空的orderId。 我将不胜感激。 谢谢 问题答案: 以下映射应该可以正常工作: 但是请注意,刷新会