我想使用JDBC在表中插入一行。但是表有很多列,因此我不想将所有列都指定为一个语句。还有另一种指定列值的方法吗?
INSERT INTO TABLE_NAME VALUES(?, ?, ?, ..., ?)
我希望没有大量的占位符,还有另一种方法。
已编辑
:我的意思是,我可以像...
这样编辑查询吗,这意味着它需要多个值并使用递增的索引或其他方式动态设置值。是的,就像@ f1sh提到的那样,问题出在占位符的数量上,但对于懒惰而言不是,在方便和整洁的情况下更多。
P.S .:出于某些滑稽的企业要求的原因,我无法使用JPA框架:)
答案 0 :(得分:3)
编辑
另一种选择是自己编写或使用SqlBuilder
SqlBuilder通过将SQL语法包装在非常轻巧且易于使用的Java对象中来改变整个情况,该Java对象遵循“ builder”范例(类似于StringBuilder)。这将许多常见的SQL语法,运行时错误变为Java编译时错误!让我们直接看一些简单的示例,看看它们如何工作。
您可以使用Spring的NamedParameterJdbcTemplate并使用变量名
>>> car = "Kia Cerato Forte 1.6M EX (COE till 03/2024)"
>>> newName = car.split(' ')
>>> ' '.join(newName[:2])
'Kia Cerato'
>>> car = "Mercedes-Benz C-Class C180 CGI"
>>> newName = car.split(' ')
>>> ' '.join(newName[:2])
'Mercedes-Benz C-Class'
>>>
模板类具有一组基本的JDBC操作,允许使用命名参数而不是传统的“?”占位符。
如果可以({安全地)使用String SQL = INSERT INTO TABLE_NAME VALUES((:id),...);
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("id", "idValue");
//...
namedParameterJdbcTemplate.update(SQL, parameters) > 0;
使用dynamic query :
Statement
您只能在封闭值上使用它,因此将没有SQL注入选项