gpt4 book ai didi

java - 如何去掉java sql语句中的许多占位符(问号)

转载 作者:行者123 更新时间:2023-12-01 19:37:46 25 4
gpt4 key购买 nike

我想使用 JDBC 向表中插入一行。但是表有大量列,所以我不想将所有列指定到语句中。还有另一种指定列值的方法吗?

INSERT INTO TABLE_NAME VALUES(?, ?, ?, ..., ?)

我希望有另一种方法可以做到这一点,而无需大量占位符。

编辑:

我的意思是,我可以像 ... 这样编辑查询吗?这意味着它需要许多值并使用递增索引或其他内容动态设置值。是的,正如 @f1sh 提到的,问题在于占位符的数量,但不是因为懒惰,而是为了方便和干净。

P.S.:由于一些有趣的企业需求原因,我无法使用 JPA 框架:)

最佳答案

编辑

另一个选择是编写您自己的或使用 SqlBuilder

SqlBuilder changes that whole scenario by wrapping the SQL syntax within very lightweight and easy to use Java objects which follow the "builder" paradigm (similar to StringBuilder). This changes many common SQL syntactical, runtime errors into Java compile-time errors! Let's dive right in to some quick examples to to see how it all works.

您可以使用 Spring 的 NamedParameterJdbcTemplate并使用变量名称

String SQL = INSERT INTO TABLE_NAME VALUES((:id),...);

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("id", "idValue");
//...
namedParameterJdbcTemplate.update(SQL, parameters) > 0;

Template class with a basic set of JDBC operations, allowing the use of named parameters rather than traditional '?' placeholders.

如果您可以(安全地)使用 dynamic query 使用语句:

Statement stmt = (Statement) con.createStatement(“SELECT username, password FROM users WHERE username='” + user + “‘ AND password='” + pass + “‘ limit 0,1”);

ResultSet rs = stmt.executeQuery();

您只能在封闭值上使用它,因此将没有 SQL 注入(inject)选项

关于java - 如何去掉java sql语句中的许多占位符(问号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56774786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com